01、多态的概述与前提
一、多态
对象在不同的时刻表现出不同状态
二、针对引用类型
编译期间状态
运行期间状态
例子:Person p=new Person();水,水蒸气,冰)
三、多态的前提条件
A:要有继承关系
B:要有方法重写
C:要有父类对象指向子类对象
02、多态的成员特点
A:成员变量:编译看左边,运行看右边
B:成员方法:编译看左边,运行看右边
C:方法有重写,而变量没有
03、多态的弊端及相应的解决方案
一、多态的弊端:
父类引用不能使用子类特有的功能
解决方案:通过子父类间的类型转换
二、基本类型
隐式转换:从小到大
强制转换:从大到小
三、引用类型
向上转型:从小到大
向下转型:从大到小
04、多态中的类型转换问题
Java.lang.ClassCastException:类型转换异常。
类型不匹配:你存储的是Cat,想转换成Dog,肯定是不行的。
05、多态的好处(扩展性和可维护性)
多态的好处:为了提高代码的扩展性和可维护性
06、抽象类的概述
一、通过"猫吃鱼,狗吃肉"这两个类来引出一个问题
A:class Cat { eat(); } class Dog { eat(); }
B:这两个类能不能抽取相同的内容呢?能。
C:因为他们的方法声明都是相同的,所以我们就抽取了方法的声明
二、针对没有方法的方法体,Java提供了一种表示形式:抽象方法
三、这个时候就有了一个关键字来表示抽象的意思:abstract。
07、抽象类的基本特点
一、抽象类的由来
从很多对象中抽取方法声明,从而定义在一个新的类中
没有方法体的方法被称为抽象方法,有抽象方法的类称为抽象类
二、抽象类的特点
A:抽象方法和抽象类用关键字abstract修饰
B:有抽象方法的类一定是抽象类(或者接口),但是抽象类中不一定有抽象方法
C:抽象类不能实体化(不能被定义)
D:如果一个类继承抽象类,那么
1.这个类本身也是抽象类
2.这个类重写父类的所有抽象方法
三、抽象类的作用
在继承中,我们为什么有时候会选择父类是抽象类呢?
强制要求子类必须完成某些功能
08、抽象类的成员特点
A:成员变量:可以有成员变量,也可以有成员常量
B:构造方法:有构造方法
疑问:既然不能被实例化,那么有构造方法有什么用呢?
答:可以用于子类访问父类数据前,对父类进行初始化
C:成员方法:可以有抽象方法,也可以有非抽象方法
1.抽象方法是为了要求子类做某些事情
2.非抽象方法是为了提高代码的复用性,被子类继承
09、接口概述
引言:
抽象类例子:abstract class Animal {public abstract void eat0;}这个抽象类中,只有抽象方法。针对这种情况,java就提供了一种更加抽象的表现形式:接口
类,我们知道用class表示。那么接口用什么表示呢?interface.这样的话,我们就可以把上面的抽象类改写interface Animal { public abstract void eat();}
一、接口的使用
有了接口该怎么使用?
答:必须也要有具体的类来实现
用那个关键字来实现呢?
答:implement
二、接口的格式
class 类名 implements 接口名 {。。。}
三、接口的实现
A:普通实现:Catc= new Cat(); Dog d=new Dog();
B:接口多态:Animal a=new Cat(); a = new Dog();
10、接口的基本特点
A:接口不能被实例化
B:接口中的方法
1.要么被子类重写
2.要么子类也是抽象类
11、接口的成员特点
A:成员变量
接口中只有常量,因为接口的成员变量有默认修饰符:public static final
推荐:永远自己给出修饰符
B:构造方法
接口没有构造方法
任何类如果没有继承父类,那么这个类就继承Object类
C:成员方法:
接口中的方法都是抽象方法,因为接口中的成员方法有默认修饰符:pubic abstract
推荐:永远自己给出修饰符
总结:接口中有切只有常量以及抽象方法
12、类与接口的关系
所有类都直接或者间接的继承自Object类。0bject类是所有类的超类
A:类与类的关系
继承关系。而且只能单继承,可以多层继承。
B:类与接口的关系
可以单实现,也可以多实现。并且还可以在继承一个类的同时,实现多个
C:接口与接口的关系
继承关系。可以单继承,也可以多继承。
13、接口的思想特点
A:接口是对外暴漏的原则。
B:接口是程序对外的功能扩展。
C:接口的出现降低耦合性。
D:接口可以用来多实现。
14、抽象类和接口的区别
A:成员特点
抽象类
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法。
成员方法:可以是抽象方法,也可以是非抽象方法。
接口
成员变量:只能是常量。默认修饰符 public static final
成员方法:只能是抽象方法。默认修饰符 public abstract
B:关系特点
类与类:继承关系,只能单继承,可以多层继承
类与接口:实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时,实现多个接口。
接口与接口:继承关系。可以单继承,也可以多继承。
C:设计理念的区别
抽象类被继承,这个类中定义的是整个继承体系的共性内容,体现的关系:is a
接口被实现,这个接口中定义的是整个体系的扩展内容,体现的关系:like a