黑马程序员------面向对象之多态,抽象,接口.

来源:互联网 发布:不交押金的网络兼职 编辑:程序博客网 时间:2024/05/21 13:51

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

多态的条件:

1.满足继承关系
2.方法的重写.(如果不重写,就失去了多态的意义)
3.父类引用指向子类对象 
类的成员:
成员变量
编译看左边 , 运行看左边
构造方法
编译看左边,运行看左边.创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
成员方法:
编译看左边 , 运行看右边
静态成员方法
编译看左边 ,运行看左边

多态的好处:
a: 提供了代码的维护性(继承保证)
b: 提供了代码的扩展性(多态保证)

多态的弊端: 就是不能访问子类特有的功能
向上转型:   就是多态的体现(父类的对象指向子类的引用)

向下转型:就是把父类的引用强制转换成子类的引用向下转型目的就是使用子类特有的功能


抽象类的特点:
a: 抽象类和抽象方法的格式
抽象方法: public abstract 返回值类型 方法名(..) ; 


抽象类的格式: abstract class 类名 {}
b: 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c: 构造方法,可以有构造方法
用于子类访问父类数据时的初始化
d: 抽象类不能实例化.
我们抽象类不能直接实例化,那么可不可以对其进行间接实例化.


通过多态的形式进行间接实例化


e: 抽象类的子类
(1): 可以是抽象类(没有意义)
(2): 可以是具体的类,需要重写抽象类中的抽象方法
抽象类的成员特点:
a: 成员变量
这个量可以是变量,也可以是常量
b: 构造方法
可以有 , 用于子类在访问父类数据时候的初始化
c: 成员方法
可以是抽象方法,也可以是非抽象方法


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

abstract和private
因为private的不能被子类继承,不能被继承,就不能重写
abstract和final
因为被final修饰的方法,不能被子类重写
abstract和static
因为该方法是静态的,那么可以通过类名调用,但是这个方法没有方法体,所有调用
没有意义

接口的特点:
a: 定义接口格式 interface 接口名 {}
b: 类实现接口用implements表示格式: class 类名 implements 接口名 {}


c: 构造方法
没有构造方法
d: 无法实例化
我们可以通过多态的形式,对其进行间接实例化


e: 接口的子类
(1): 可以是抽象类(没有意义)
(2): 可以是非抽象类, 但是该类需要重写接口中的抽象方法

接口中的成员特点:
成员变量: 都是常量, 存在默认的修饰符:  public static final 建议自己给出
构造方法: 没有构造方法
成员方法: 都是抽象方法,存在默认的修饰符: public abstract  


类与类 , 类与接口 , 接口和接口的关系
类与类: 继承关系,在java只支持单继承,不支持多继承 , 但是支持多层继承
类与接口: 实现的关系(implements), 并且支持多实现,多实现的格式: class 子类名 implements 接口名1, 接口名2 , ...{} 一个类可以继承一个类的同时去实现多个接口
接口和接口: 继承关系 , 并且支持多继承

抽象类与接口的区别:

(1): 成员区别
抽象类:
成员变量: 可以是变量也可以是常量
构造方法: 有构造方法
成员方法: 可以是抽象方法,也可以是非抽象方法
接口:
成员变量: 只能是常量 ,存在默认的修饰符: public static final
构造方法: 没有构造方法
成员方法: 只能是抽象方法, 存在默认的修饰符: public abstract
(2): 关系区别:
类与类: 继承关系, 只能是单继承 , 不能是多继承,但是可以是多层继承
类与接口: 实现关系, 可以是单实现,也可以是多实现,并且一个类可以继承一个类的同时去实现多个接口
接口与接口: 继承关系  可以是单继承也可以是多继承
(3): 设计理念
抽象类 体现的关系"is a"抽象类中定义的是该继承体系的共性功能。
接口 体现的关系"like a"接口中定义的是该继承体系的扩展功能。

0 0
原创粉丝点击