多态-抽象类-接口

多态

  1. 多态前提

    a、要有继承
    b、要有方法重写
    c、要有父类引用指向子类对象

  2. 执行特点

    成员变量
    编译left(父类),运行left(父类)
    成员方法
    编译left(父类),运行right(子类)
    静态方法
    编译left(父类),运行left(父类)
    成员方法执行属于动态绑定,执行子类方法,静态方法不存在动态绑定,执行父类方法

  3. 多态好处、弊端

    提高了代码维护性(继承保证)
    提高了代码扩展性(多态保证)
    例:可以作为形式参数,接收任意子类对象

  4. 多态弊端

    不能使用子类特有的属性和行为

抽象类

  1. 特点:

    a、抽象类和抽象方法必须用abstract关键字修饰
    abstract class 类名{}
    public abstract void method();
    b、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口
    c、抽象类不能实例化,那么抽象类如何实例化呢?
    按照多态的方式,由具体的子类实例化,其实也属于多态的一种
    d、抽象类的子类
    要么是抽象类
    要么重写抽象类中的所有抽象方法

  2. 抽象类成员特点

    成员变量:既可以是变量,也可以是常量,abstract不能修饰成员变量
    构造方法:有,用与子类访问父类数据的初始化
    成员方法:既可以是抽象的,也可以是非抽象的
    成员方法特性:
    抽象方法:强制要求子类要做的的事情
    非抽象方法:子类继承的事情,提高代码复用性

  3. 面试题

    a、一个抽象类如果没有抽象方法,可不可以定义为抽象类?意义?
    可以,目的只有一个,不让其他类创建本类对象,由子类来完成
    b、abstract不能和哪些关键字共存
    private
    被abstract修饰是为了让子类看到并强制重写
    被private修饰不让子类访问,继承发生矛盾
    final
    被abstract修饰的方法强制要求子类重写
    被final修饰的方法不让子类重写,矛盾
    static
    被abstract修饰的方法没有方法体
    被static修饰的方法可以用类名直接调用,但是调用抽象方法是 没有意义的,静态方法不存在继承、重载所以矛盾

接口

  1. 概述

    从狭义的角度讲,就是值java中的interface
    从广义的角度讲,对外提供规则的都是接口

  2. 特点

    接口用关键字interface表示,interface 接口名{ }
    类实现接口用implements表示,class 类名 implements 接口名{ }
    接口不能实例化,按照多态的方式来实例化
    接口的子类,可以是抽象类,意义不大;也可以是具体类,要重写接口中的所有抽象方法

  3. 接口成员特点

    成员变量:只能是常亮,并且是静态的、公开的
    默认修饰符 public static final
    构造方法:接口没有构造方法
    成员方法:只能是抽象方法,(随jdk版本而不同,Java8中允许接口定义默认方法,默认方法必须使用default修饰,且不能用static和final修饰,默认也只能用public修饰。通过默认方法实现“多继承”。不能直接使用接口中定义的默认方法,需要使用接口实现类来调用默认方法。)
    默认修饰符 public abstract

  4. 类与类、类与接口、接口与接口关系

    类与类:
    继承关系,只能单继承,可以多层继承
    类与接口:
    实现关系,可以单实现,也可以多实现,也可以继承一个类同时实现多 个接口
    接口与接口:
    继承关系,可以单继承,也可以多继承

  5. 抽象类与接口区别

    a、成员区别
    抽象类:
    成员变量:可以是变量,也可以是常量
    构造方法:有
    成员方法:可以抽象,也可以非抽象
    接口:
    成员变量:只可以是常量
    成员方法:只可以是抽象方法(注意jdk版本不同)
    b、关系区别:
    同上。。。
    c、设计理念区别
    抽象类,被继承体现的是“is a”的关系。抽先类中定义的是该继承体系的共性功能。
    接口,被实现体现的是“like a”的关系,接口中定义的是该继承体系的扩展功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值