日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java的多态

發布時間:2025/3/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的多态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態性是OOP中的重要特性,在java中,多態性主要通過重載和重寫兩種方式實現。

當一個父類有多個子類,通過多態可正確地調用不同子類的方法:

class Shape{public void draw(){System.out.println("draw a shape");} }class Square extends Shape{@Overridepublic void draw() {System.out.println("draw a square");} }class Circle extends Shape{@Overridepublic void draw() {System.out.println("draw a circle");} }class PolyTest{public static void main(String[] args) {Shape[] shapes=new Shape[10];for (int i = 0; i < shapes.length; i++) {shapes[i]=new Random().nextInt(2)==0?new Square():new Circle();}for (Shape shape : shapes) {shape.draw();}} }/* output: draw a square draw a circle draw a square draw a circle draw a circle draw a square draw a square draw a circle draw a square draw a circle */

?


?

但是也有需要注意的地方,如當父類的變量和方法為私有時:

class Super {private String name = "private name";private void func() {System.out.println("private function");}public static void main(String[] args) {Super sup = new Sub();sup.func();System.out.println(sup.name);} }class Sub extends Super {public String name = "public name";public void func() {System.out.println("public function");} }/** output: private function private name*/

結果并不是我們所認為的“public function public name”。因為父類的私有成員對子類是屏蔽的,無法被重寫,所以jvm直接調用父類的func方法,不會再檢查子類,即使子類中擁有同名方法,也會被認為是新的方法。

為了避免出錯,最好不要在子類中出現與父類私有成員同名的成員,以免被誤導。


?

再來看一個例子:

class Super {public String name = "super name";public String getName() {return name;} }class Sub extends Super {public String name = "sub name";public String getName() {return name;}public String getSupName() {return super.name;} }class PolyTest {public static void main(String[] args) {Super sup = new Sub();System.out.println("sup name:" + sup.name + ";sup.getName:" + sup.getName());Sub sub = new Sub();System.out.println("sub name:" + sub.name + ";sub.getName:" + sub.getName() + ";sub.getSupName:" + sub.getSupName());} }/* output:sup name:super name;sup.getName:sub name sub name:sub name;sub.getName:sub name;sub.getSupName:super name */

當子類對象向上轉型為父類對象,并直接調用成員變量時,調用的是父類的成員變量;調用的成員方法還是子類的成員方法。

所以在繼承過程中,如果成員變量可能要被覆蓋,最好將其設置為private,并用get,set方法來對其進行操作,這種方法在很多情況下都會用到,例如在封裝新的數據類型時。

?

轉載于:https://www.cnblogs.com/zhisuoyu/p/5276703.html

總結

以上是生活随笔為你收集整理的java的多态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。