多态的弊端
【弊端】
多态只能调用子类重写的父类方法,而无法调用子类特有的方法。
【解决方法】
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