zoukankan      html  css  js  c++  java
  • final关键字、多态、接口和抽象类

    1:final关键字(掌握)
    (1)是最终的意思,可以修饰类,方法,变量。
    (2)特点:

    • 它修饰的类,不能被继承。
    • 它修饰的方法,不能被重写。
    • 它修饰的变量,是一个常量。

    (3)面试相关:
        A:局部变量

    • 基本类型:值不能发生改变
    • 引用类型:地址值不能发生改变,但是对象的内容是可以改变的

        B:初始化时机

    • 只能初始化一次。
    • 常见的给值:
    •               定义的时候。(推荐)
    •               构造方法中。

    2:多态(掌握)
    (1)同一个对象在不同时刻体现出来的不同状态。
    (2)多态的前提:

    • 有继承或者实现关系。
    • 有方法重写。
    • 有父类或者父接口引用指向子类对象。


    多态的分类:
    a:具体类多态

    class Fu {}
    class Zi extends Fu {}
    Fu f = new Zi();

    b:抽象类多态

    abstract class Fu {}
    class Zi extends Fu {}
    Fu f = new Zi();

    c:接口多态

    interface Fu {}
    class Zi implements Fu {}
    Fu f = new Zi();

    (3)多态中的成员访问特点

    A:成员变量
    编译看左边,运行看左边
    B:构造方法
    子类的构造都会默认访问父类构造
    C:成员方法
    编译看左边,运行看右边
    D:静态方法
    编译看左边,运行看左边

    为什么?
                因为成员方法有重写。
    (4)多态的好处:

    • 提高代码的维护性(继承体现)
    • 提高代码的扩展性(多态体现)

    (5)多态的弊端:

    • 父不能使用子的特有功能。

    现象:
         子可以当作父使用,父不能当作子使用。
    (6)多态中的转型

    • 向上转型   ------>   从子到父
    • 向下转型   ------>   从父到子

    (7)孔子装爹的案例帮助大家理解多态
    (8)多态的练习
    A:猫狗案例
    B:老师和学生案例

    3:抽象类(掌握)
    (1)把多个共性的东西提取到一个类中,这是继承的做法。
    但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。
    也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。
    所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。
    而一个没有具体的方法体的方法是抽象的方法。
    在一个类中如果有抽象方法,该类必须定义为抽象类。
    (2)抽象类的特点

    • 抽象类和抽象方法必须用关键字abstract修饰
    • 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
    • 抽象类不能实例化
    • 抽象类的子类

    a:是一个抽象类。
    b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。
    (3)抽象类的成员特点:

    • 成员变量:
    •         有变量,有常量
    • 构造方法:
    •          有构造方法
    • 成员方法:
    •          有抽象,有非抽象

    (4)抽象类的几个小问题
    A:抽象类有构造方法,不能实例化,那么构造方法有什么用?
    答:用于子类访问父类数据的初始化。
    B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?
    答:为了不让创建对象。
    C:abstract不能和哪些关键字共存
    答:

    • a:final 冲突
    • b:private 冲突
    • c:static 无意义

    4:接口(掌握)
    (1)回顾猫狗案例,它们仅仅提供一些基本功能。
    比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,
    是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。
    (2)接口的特点:
    A:接口用关键字interface修饰

    interface 接口名 {}

    B:类实现接口用implements修饰

    class 类名 implements 接口名 {}

    C:接口不能实例化

    那么,接口如何实例化呢?按照多态的方式来实例化。

    D:接口的实现类

    • 可以是抽象类。但是意义不大。
    • 可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

    由此可见:

    • 具体类多态(几乎没有)
    • 抽象类多态(常用)
    • 接口类多态(最常用)

    (3)接口的成员特点:

    • 成员变量
    •         只能是常量
    •          默认修饰符:public static final
    • 构造方法
    •          没有构造方法
    • 成员方法
    •          只能是抽象的
    •          默认修饰符:public abstract

    (4)类与类,类与接口,接口与接口

    A:成员区别
    抽象类:

    • 成员变量:可以变量,也可以常量
    • 构造方法:有
    • 成员方法:可以抽象,也可以非抽象

    接口:

    • 成员变量:至可以常量
    • 构造方法:无
    • 成员方法:只可以抽象

    B:关系区别
    类与类:

    • 继承关系,只能单继承,可以多层继承。

    类与接口:

    • 实现关系,可以单实现,也可以多实现,
    • 并且还可以在继承一个类的同时实现一个
    • 或多个接口。

    接口与接口:

    • 继承关系,可以单继承,也可以多继承。

    C:设计理念区别
    抽象类 被继承体现的是:"is a"的关系。
    抽象类中定义的是该继承体系的共性功能。
    接口 被继承体现的是:"like a"的关系。
    抽象类中定义的是该继承体系的扩展功能。

  • 相关阅读:
    shell流程控制
    shell编程变量介绍与表达式详解
    shell编程简介
    反向代理与负载均衡
    存储库之mongodb,redis,mysql
    请求库之requests,selenium
    解析库之re、beautifulsoup、pyquery
    爬虫基本原理
    Django 函数和方法的区别
    Django 知识补漏单例模式
  • 原文地址:https://www.cnblogs.com/crazypokerk/p/9016518.html
Copyright © 2011-2022 走看看