java编程思想阅读笔记(三)多态

时间:2022-12-28 18:13:05
    继续记笔记,没有什么特点,只是记些平时可能忘掉的东西,和验证一些:
   (1)绑定:将一个方法调用同一个方法主体关联起来(换句话说,方法调用与这个所调用的方法的实现关联起来,有多态的存在,可能是相同的函数名,却是不同的实现)。若再程序执行前进行绑定(如果有的话,由编译器和链接程序实现)叫前期绑定;在运行时根据对象的类型进行绑定(具体说,例如根据方法调用主体的类型、输入参数的类型),叫后期绑定或动态绑定、运行时绑定。Java中除了static方法和final方法(private方法属于final方法)之外,其它的方法都是后期绑定的。
   (2)由基类产生的多个对象,可以用不同子类初始化,进而这些对象调用的方法被绑定到子类的方法(基类和子类共有的),但是这些对象不能调用子类新增的方法。( ?)
   (3)初始化顺序:
    a.将分配给对象的存储空间初始化为二进制的零
    b.从基类到子类静态域的初始化
    c.往上(基类)调用构造函数
    d.按照声明的顺序调用成员初始化方法
    e.调用导出类的构造器的主体

附个简单的程序感受一下:

package com.test.myjava;

class Shape{
public void draw(){
;
}
Shape(){
System.out.println("Class Shape");
}
static{
System.out.println("Shape static field");
}
}
class One{
static int count = 0;
One(){
System.out.println("Class One"+count++);
}
}
class Circle extends Shape{
One o1 = new One();
One o2 = new One();
int i = 3;
static {
System.out.println("Circle static field ");
}
Circle(){
System.out.println("Class Circle");
System.out.println("member i="+ i);
}
public void draw(){
System.out.println("Circle draw");
}
public void circleOnly(){
System.out.println("Circle Only");
}
}
public class BlankFinal {

public static void main(String args[]){
Circle c = new Circle();
c.circleOnly();
}
}
   (4)协变返回类型:在子类中的 覆盖了基类的 方法的返回类型可以是基类中被覆盖方法的返回类型的子类型(导出类型);例如基类中某个方法返回Shape类型,子类中覆盖了这一方法,可以返回Circle类型(Circle继承Shape)
   (5)状态模式:运行中动态地改变对象(例如:利用引用在运行时可以与另一个不同的对象重新绑定起来,即同属于一个基类的不同子类间转换,类似于状态转换)。