多态思想
多态是为了消除类型之间的耦合关系,我个人理解,多态就是可以利用一个基类的变量引用子类的对象(向上转型),而对该基类中方法的操作,会在运行时候自动绑定到对子类中覆盖的相应方法。
知识点
- Java中除了static方法和final方法外(private方法自动为final方法),其他的所有方法都是后期绑定。
- 多态可以使得我们可以根据自己的需要随时对系统添加任意多的新类型,即将改变的事物与未变的事物分开。
- 需要注意的是多态只是针对于普通的方法,对于域和静态方法而言,不具备多态的特性。
package com.uestc.kun;
public class Duotai {
public static void main(String[] args) {
Base base = new Super();
System.out.println("Base iShare: "+base.iShare+"\nbase.getField: "+ base.getField()+"\n"+base.getStaticStr());
}
}
class Base{
public int iShare = 0;
public int getField(){return iShare;}
static String getStaticStr(){return "Base getStaticStr ";}
}
class Super extends Base{
public int iShare=1;
public int getField(){return iShare;}
public int getBaseField(){return super.iShare;}
static String getStaticStr(){return "Super getStaticStr ";}
}
/*
Result:
Base iShare: 0
base.getField: 1
Base getStaticStr
*/
4 . 构造函数不具备多态性,其实际上为static的。复杂对象构造器调用顺序:
(0 )在此之前,将分配给对象的存储空间初始化为二进制的0.
(1) 调用基类构造器
(2) 按照声明顺序调用成员初始化方法
(3) 调用导出类构造器
5 . 在大多数情况下不必考虑垃圾回收,如果确实需要垃圾回收,应当遵循 销毁顺序和初始化顺序相反。 并且需要确保成员对象中没有其他的引用,否则必须使用 引用计数 来跟踪仍旧访问着共享对象的对象数量。
6 . 在构造器中,可以安全的调用基类中的final方法和private方法。
7 . 协变返回类型: 子类中被覆盖的方法可以返回基类方法中返回类型的某个子类。也就是说:一个基类方法返回另一个基类对象,那么对应子类可以返回对应的另一个子类。