java第九天---多态、抽象类、接口、各种修饰符的作用及应用场景、内部类

1   什么叫多态

    某一个事物,在不同时刻表现出来的不同状态。猫可以是猫的类型。猫 m = new 猫();  同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();

2   多态的前提

        a:要有继承关系。
        b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
        c:要有父类引用指向子类对象, 父 f =  new 子();

3 多态中的成员访问特点

       a:成员变量
            编译看左边,运行看左边
        b:构造方法
            创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化
        c:成员方法
            编译看左边,运行看右边
        d:静态方法
            编译看左边,运行看左边
            (静态和类相关,算不上重写,所以,访问还是左边的)

4 多态的好处

        提高了代码的维护性(继承)和扩展性(多态)

5  多态的缺点

        不能使用子类的特有成员

解决办法:把父类引用转成子类引用

6 多态例题注意

7 抽象类概述

我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。 所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。

8 抽象类特点

抽象类不能具体实例化对象,那抽象类如何实例化呢?通过其子类实例化,称为抽象类多态

抽象类的子类要么是抽象类,要么重写所有的抽象方法

 

9 抽象类的成员特点

        a:成员变量:既可以是变量,也可以是常量。
        b:构造方法:有, 用于子类访问父类数据的初始化。
        c:成员方法:既可以是抽象的,也可以是非抽象的。

        d:成员方法特性:抽象方法---强制要求子类做的事情。非抽象方法---子类继承的事情,提高代码复用性。

10 关于抽象类的两道面试题

    A:面试题1
        一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
        答案: 可以 . 不能创建对象.
    B:面试题2
        abstract不能和哪些关键字共存?
            private    冲突
            final      冲突
            static     不能共存 无意义

11 接口

现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。
所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可

12 接口特点

        a:接口不能实例化
            那么,接口如何实例化呢?
            按照多态的方式来实例化。
        b:接口的子类
            a:可以是抽象类。但是意义不大。
            b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)  

13 接口成员特点


        成员变量;只能是常量,并且是静态的。
                默认修饰符:public static final
                建议:自己手动给出。
        构造方法:接口没有构造方法。
        成员方法:只能是抽象方法。
                默认修饰符:public abstract
                建议:自己手动给出。。

 14 类与类,类与接口,接口与接口的关系

       a:类与类:
            继承关系,只能单继承,可以多层继承。
        b:类与接口:
            实现关系,可以单实现,也可以多实现。
            并且还可以在继承一个类的同时实现多个接口。
        c:接口与接口:
            继承关系,可以单继承,也可以多继承。

15 抽象类与接口的区别

  A:成员区别
        抽象类:
            成员变量:可以
变量,也可以常量
            构造方法:
            成员方法:可以抽象,也可以非抽象
        接口:
            成员变量:只可以
常量

            构造方法:没有
            成员方法:只可以
抽象    


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

16 注意

1

2

3

17  内部类概述

把类定义在其他类的内部,这个类就被称为内部类。

18 内部类访问特点

        a:内部类可以直接访问外部类的成员,包括私有
        b:外部类要访问内部类的成员,
必须创建对象

 A 按照内部类位置分类

        成员位置:在成员位置定义的类,被称为成员内部类。    
        局部位置:在局部位置定义的类,被称为局部内部类。

B:成员内部类
        如何在测试类中直接访问内部类的成员。
        格式:     外部类名.内部类名 对象名 = 外部类对象.内部类对象;

19  注意

1

2

  20  内部类修饰符

       private 为了保证数据的安全性
        static     为了方便访问数据
               注意事项:  a:静态内部类访问的外部类数据必须用静态修饰。
                                  b: 成员方法可以是静态的也可以是非静态的

 


        

猜你喜欢

转载自blog.csdn.net/weixin_41847891/article/details/85112654
今日推荐