zoukankan      html  css  js  c++  java
  • 继承 抽象 接口 多态

    1. 继承

      概述

        继承就是子类继承父类的属性和行为,子类可以直接访问父类的非私有方法

        Java语言是单继承 多级继承 一个父类可以有多个子类

        提高了代码的复用性,类与类之间产生了关系,是多态的前提

      继承中方法的覆盖重写(声明不变,重新实现)

        父子类之间方法,参数列表相同

        子类方法权限大于等于父类

        子类方法的返回值范围小于等于父类方法的返回值

        大部分情况下,方法子父类方法声明是完全一样的

      继承中构造方法的访问

        构造方法名与类名一致,所以子类无法继承父类构造

        构造方法用于初始化成员变量,子类的初始化过程中,须先执行父类的初始化动作

        父类成员变量初始化后,才可以给子类使用

        所以子类构造必须调用父类构造,不写则默认赠送super( ); 写了则不赠送

        子类构造可以通过super关键字调用父类重载构造

        子类构造中,super构造调用只能有一个且必须是第一个

        只有子类构造才能调用父类构造,子类成员方法不能调用父类构造

      继承中成员变量,成员方法的访问

        与多态完全一样

        成员变量:编译看左,运行看左

        成员方法:编译看左,运行看右

      super在继承中的用法  

        代表父类的存储空间标识(可以理解为父亲的引用)

        子类成员方法中访问父类的成员变量,方法

        子类构造访问父类构造 super( );

      this在继承中的用法

        代表当前对象的引用(谁调用就代表谁)

        本类成员方法中访问本类成员变量,成员方法

        本类构造访问本类另一构造

        this调用也必须是构造方法的第一个语句

          this和super两个构造调用不可同时使用

          this( ); 没有 .

      继承图解

        创建子类对象时,先初始化父类空间,再创建其子类对象本身

        先把父类构造执行完,再在这个父类内容的外围写上子类内容

    2. 抽象

      概述

        子类们重写父类方法,而子类各自的实现都不尽相同

        则父类方法声明和方法主体,声明有意义,而方法主体没有意义

        没有方法主体的方法称为抽象方法,用abstract修饰

        包含抽象方法的类就是抽象类,用abstract修饰

      注意

        继承抽象类的子类须重写父类所有抽象方法,否则该子类也必须声明为抽象类

        抽象类不能创建对象,只能创建非抽象子类的对象

        抽象类有构造方法,供子类创建对象时,初始化父类空间使用

        不一定包含抽象方法,但是有抽象方法的类必定是抽象类

    3. 接口

      概述

        接口是Java语言中一种引用类型,是方法的集合

        接口的作用是制定规则,实现扩展

        如果说类的内部封装了成员变量,构造方法和成员方法,那么接口的内部主要就是封装了方法

        接口定义用interface,也会被编译成.class文件,但要明确它不是类,而是引用数据类型

        接口不能创建对象,但可以被实现(implements,类似继承),接口实现类需实现接口所有方法

        类是单继承的,接口是可以多实现的(一个类实现多个接口)

        Java7抽象方法  /  Java8默认方法,静态方法  /  Java9私有方法(静态/默认)

      接口中的常量

        (public static final) 数据类型 变量名 = 值;

        接口常量必须赋值,否则无法通过编译

        命名规则:全大写 _连接 (NUM_OF_PEOPLE)

        通过 接口名.常量名 直接访问

        接口中的抽象方法:固定修饰符 public  abstract 可省略

      接口中的默认方法

        解决接口升级问题

        如果接口如添加新的抽象方法,则所有实现类都须实现此抽象方法

        若直接在接口中添加默认方法,则实现类代码不用更改

        可以直接通过接口名称.默认方法名称来调用接口的默认方法

        defaul关键字不能省略(因为接口中的方法默认是public的)

        接口默认方法可被继承,也可重写,但只能通过实现类对象调用

      接口中的静态方法

        静态与.class文件相关

        一个类可实现多个接口,它们的静态方法可能冲突

        所以应通过 接口名称.方法名( ) 调用静态方法,不能通过实现类对象调用

      接口中的私有方法

        解决接口中多个默认方法和静态方法之间的代码重复问题

        多个默认方法之间有重复的代码,用一个共有方法将其抽取出来

        但这个共有方法不能让实现类访问到,应该是私有化的,这就是私有方法

        普通私有方法:多个默认方法代码重复(修饰符只有private,加default报错,因为权限冲突)

        静态私有方法:多个静态方法代码重复(private和static顺序无所谓)

      注意事项

        1.接口没有静态代码块或者构造方法

        2.实现类所实现的多个接口存在重复的抽象方法,只需覆盖重写一次即可

        3.实现类所实现的多个接口存在重复的默认方法,则实现类必须对冲突的默认方法进行覆盖重写

        4.父类和接口的默认方法冲突,优先用父类的方法

        5.接口之间的多继承,多个父接口中的抽象方法重复,没关系

        6.多个父接口中的默认方法重复,子接口必须覆盖重写此默认方法,且带着default

    4. 多态

      概述

        指同一行为,在不同对象身上的多种表现形式

        面向对象三大特征 : 封装 继承 多态

        多态的前提:1.继承/实现 2.方法的重写 3.父类引用指向子类对象

        格式:父类名称 对象名 =  new  子类名称( );

      多态的意义

        无论右边new的是哪个子类对象,左边都不变,代码统一

        实现父类的引用动态的调用子类的功能

        有良好的扩展性

        弊端是无法使用子类的特有内容

      多态成员变量,成员方法的访问

        与继承完全一样

        成员变量:编译看左,运行看左

        成员方法:编译看左,运行看右

      向上转型

        其实就是多态写法

        格式:父类名称 对象名 =  new 子类名称( );

        含义:创建一个子类对象,把它当作父类来看待使用

        向上转型一定是安全的,从小范围转向了大范围

        对象一旦向上转型为父类,则无法调用子类特有方法

        类似于基本类型的自动类型转换

      向下转型

        作用:解决多态的弊端 (无法使用子类的特有内容)

        格式:子类名称 对象名 = (子类名称) 父类对象;

        含义:将父类对象,还原成本来的子类对象

        向下转型须原路返回,否则编译通过,但运行报错

        类似于基本类型的强制类型转换

        向下转型之前用instanceof 判断一下

      Instanceof 方法

        对象名 instanceof 类名/数据类型 :返回一个boolean

  • 相关阅读:
    Vim
    一文搞定Samba云服务器配置(阿里云)CentOS8.3
    第四课 婴儿是如何思考的 思维的发展历程
    C++/VS基础篇
    Windows下Qt VS 打包程序 到他人电脑安装运行出现的问题
    第三课 斯金纳
    第二课基础 弗洛伊德
    C++中头文件和实现文件的关系
    字符串 数字 转换
    Ucore lab1实验报告
  • 原文地址:https://www.cnblogs.com/bushishucai/p/9631691.html
Copyright © 2011-2022 走看看