21面对对象三大特征 封装继承多态之多态 向上转型和向下转型

多态:代码在编译中多种状态的展示

1、 多态的前提是1是发生继承关系

2、 多态的前提是2是要有方法的重写

3、 父类引用指向子类对象,如:Animal a = new Dog();--向上造型

4、 多态中,成员方法编译看左边,运行看右边   就是编译申明变量的时候 a是Animal 而在运行的时候 a是dog

多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边。
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
编译看左边,运行看右边。
D:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是看左边的)
由于成员方法存在方法重写,所以它运行看右边。

5.父类申明对象,由子类来实际创建,可以调用那些方法看父类,具体方法的执行看啊可能子类。可以把多态想成一本书,父类是目录 子类是正文

 

多态的好处

1、 多态可以让我们不用关心某个对象到底是什么具体类型,

就可以使用该对象的某些方法。 

2、 提高了程序的扩展性和可维护性

3.解耦合(多个模块之间的关联) 高内聚低耦合

 

 

现在我采用时期来展示代码的多态 分为编译时期多态和运行时期多态 判断是否是运行时期多态要看是不是运行时期绑定的代码

在编译时期不知道要传入的是什么对象,只有在把实参给定的时候要传入的是什么对象。

编译时期: ----编译时多态---编译时期绑定代码  下面两个函数 参数不一样那么就是在编译时期m方法展现出多种状态

public static void m(){}
public static void m(int i,int j){}

运行时期多态 -重写,向上转型

public static void main(String[] args) {
A12 a=new B12();
a.m();
System.out.println(a.i);
}

}

class A12{
    int i=100;
     void m() {
    System.out.println("f");

    }
}
class B12 extends A12{
    int i=1000;
    void m() {
    System.out.println("z");

    }

结果是100 z  向上转型时 属性是父类的,方法是执行的是子类的。

java类加载顺序

JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的, 静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

先初始化父类的静态代码--->初始化子类的静态代码-->
初始化父类的非静态代码--->初始化父类构造函数--->
初始化子类非静态代码--->初始化子类构造函数

原文地址:https://www.cnblogs.com/xuwangqi/p/11085340.html