zoukankan      html  css  js  c++  java
  • 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类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的, 静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

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

  • 相关阅读:
    【Mocha.js 101】Mocha 入门指南
    CSS 中 Font-Family 中英文对照表
    Android Studio中找出不再使用的资源
    Java反射机制实战——字段篇
    python进阶——day02、03面向对象进阶
    python进阶_day01面对对象编程基础
    day05(文件配置命令和远程登录)
    day04(磁盘管理与目录介绍)
    day03(系统启动及常用的Linux命令的基本使用)
    day02(操作系统简介和Linux的安装与常用命令简介)
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11085340.html
Copyright © 2011-2022 走看看