IT序号网

多态的弊端

itxm 2021年05月25日 编程语言 339 0
【弊端】
多态只能调用子类重写的父类方法,而无法调用子类特有的方法。
【解决方法】
1)创建子类对象,调子类特有方法。(但同时创建很多个相同的对象,很浪费内存)
2)将使用多态的类向下转型,再调用子类方法。
 1 public class Test { 
 2     public static void main(String[] args) { 
 3         Parent p = new Son();  //向上转型 
 4         p.show(); 
 5         Son s =(Son)p;    //向下转型 
 6         s.method(); 
 7     } 
 8 } 
 9  
10 class Parent { 
11     public Parent() { 
12     } 
13     public void show() { 
14         System.out.println("父类方法"); 
15     } 
16 } 
17  
18 class Son extends Parent { 
19     public Son() { 
20     } 
21     public void show() { 
22         System.out.println("子类方法"); 
23     } 
24     public void method() { 
25         System.out.println("子类特有方法"); 
26     } 
27 }

运行结果:

1 子类方法 
2 子类特有方法
 【多态中给成员变量赋值】
 1 public class Test { 
 2     public static void main(String[] args) { 
 3         Parent p = new Son(); 
 4         p.show(100); 
 5     } 
 6 } 
 7  
 8 class Parent { 
 9     int a =10; 
10     public Parent() { 
11     } 
12     public Parent(int  x) { 
13         a=x; 
14     } 
15     public void show() { 
16         System.out.println("父类方法"+a); 
17     } 
18     public void show(int  x) { 
19         a=x; 
20         System.out.println("父类方法"+a); 
21     } 
22 } 
23  
24 class Son extends Parent { 
25     //a = 20;        报错 
26     //super.a = 20;        报错 
27     int a =20;        //这里默认就是子类独有的成员变量,不会覆盖原有父类的成员变量 
28     public Son() { 
29     } 
30     public Son(int  x) { 
31         a=x; 
32     } 
33     public void show() { 
34         System.out.println("子类方法"+a); 
35     } 
36     public void show(int  x) { 
37         a=x; 
38         System.out.println("子类方法"+a); 
39     } 
40 }
运行结果:
1 子类方法100
 

评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!