JavaEE-09-JAVA特性三:多态
多态定义:
某一类事物的多种存在形态。
同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如下图:
  
多态的好处:
1.消除类型之间的耦合关系
2.可替换性
3.可扩充性
4.接口性
5.灵活性
6.简化性
最重要的一点就是,使程序有良好的扩展,并可以对所有类的对象进行通用处理。
多态的弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。
多态的前提:
1.必须有继承关系;
2.要有方法重写;
3.要有父类引用指向子类对象。
Parent p = new Child()
注意:
当使用多态方式调用方法时,首先检查父类中是否有该方法。
如果没有,即编译错误;如果有,再去调用子类的同名方法。
其实,多态的最终目的就是调用子类中重写后的同名方法
多态的特点:
成员变量:
只看引用变量所属的类。
编译时:参考引用型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败;
运行时:;
(简单说:编译和运行都看等号的左边)
构造方法:
创造子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
(简单说:编译和运行都看左边)
成员方法:
编译时:参考引用型变量所属的类中是否有调用的成员方法,有,编译通过,没有,编译失败;
运行时:因为子类的方法对父类的方法进行了重写,所以运行结果为右边子类的方法;
(简单说:编译看左边,运行看右边)
静态方法:
举例:
1 class A{ 2 public void show(){ 3 show2(); 4 } 5 public void show2(){ 6 System.out.println("I"); 7 } 8 } 9 class B extends A{ 10 public void show2(){ 11 System.out.println("love"); 12 } 13 } 14 class C extends B{ 15 public void show(){ 16 super.show(); 17 } 18 public void show2(){ 19 System.out.println("you"); 20 } 21 } 22 public class DuoTaiTest3{ 23 public static void main(String[] args){ 24 A a = new B(); 25 a.show();
//编译看左边:对象a所在的类A中有show()方法,所以编译通过
//运行看右边:类B中没有show()方法,所以继承父类A的show()方法,调用show2()方法 26 27 B b = new C(); 28 b.show();
//编译看左边:对象b所在的类B中没有show()方法,但会继承其父类A的show()方法,所以编译通过
//运行看右边:类C中有show()方法,是调用父类B的show()方法,而父类B是继承A的show()方法,所以还是调用show2()方法 29 } 30 }
多态的转型:
比如上面实例中的:A a = new B();
这就是向上转型,将B类型自动向上提升成了A类型,但是无法访问A类型自有的特有功能。(作用就是限制访问特有功能)
再比如:B b = (B)a;
这就是向下转型,将A类型向下转成了B类型,使之具有B类型的特有功能,可以调用B类的成员方法。
注:对于转型,自始自终都是子类对象在做着类型的变化。
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号