多态/接口/抽象类

来源:互联网 发布:mac显示磁盘 编辑:程序博客网 时间:2024/05/19 22:25

一.多态

1.三个必要条件
1)条件1:必须有继承关系(如果没有继承关系,谈不上多态!)
2)条件2:必须有方法重写
子类出现了父类一样的 方法声明
3)有父类引用指向子类对象:向上转型
Fu f = new Zi() ;
多态的三个条缺一不可!
2.多态成员访问特点
(1)成员变量
编译看左,执行看作
(2)成员方法
便宜看左,执行看右,由于存在方法重写,所以最终的就是子类的成员方法
(3)静态成员方法(静态直接和类有关系,方法不能重写)
编译看左,执行看左
(4)构造方法
存在继承关系,还是分层初始化
3.多态的好处
1.提高代码的维护性(由继承保证)
2.提高代码的扩展性(由多态保证)
4.多态的弊端
1.不能访问子类的特有的成员方法
解决方法:向下转型

Animal3 a = new Cat3() ; //向上转型        Cat3 c = new Cat3() ;//新建对象,需要堆内存开辟空间,浪费内存        //父类的引用强制转换为子类的引用        Cat3 c = (Cat3) a ;

二.抽象类

抽象类的概念:
每一个动物的吃和睡的功能不一样,不应该把动物类定义为一个具体类,而是给出一个声明(abstract)
当一个类中如果有抽象功能(抽象方法)的时候,那么这个类一定要定义为抽象类!
问题:一个抽象类中可以有非抽象方法吗?
一个抽象类中可以抽象,也可以有非抽象的(作为一个判断题记忆!)
抽象类不能实例化:抽象类不能创建对象那么一个抽象类如何进行实例化:
通过抽象类多态形式:父类的引用指向子类对象,通过子类进行初始化!
抽象类的子类的特点:
抽象类的子类是抽象类,那么没有意义!
最终使用的就是通过子类进行对象初始化的,如果子类都被抽象修饰了,那么也不能创建对象,所以没意义
抽象类多态:
强制子类必须重写当前抽象的父类中所有的抽象方法
还可以提高代码的维护性(里面继承关系保证!)

三.接口

1.接口的概念的一种扩展功能

interface  接口名{//接口里面的方法}

2.接口的实现

接口的子实现类:
1)接口的子实现类是抽象类,没有意义,子类都不能创建对象了;实际开发中用的就是子类的对象进行初始化!
2)接口的子实现类是非抽象类
接口的实例化:就是通过子实现类对数据进行初始化!

class 类名 implements  接口名{}

3.接口的特点
1.成员变量
默认修饰符public static final
2.成员方法
默认修饰符 public abstract
3.构造方法
接口是没有构造方法的

四.总结

类与类的关系:
继承关系:extends,java中只支持单继承,不支持多继承,但是可以多层继承!
类与接口的关系
实现关系:implements,并且,一个类在继承另一个类的同时,可以实现多个接口
(class 子实现类名 enxtends Object implements 接口名1,接口名2…)

接口与接口的关系
继承关系:extends,可以支持单继承,也可以多继承!