day09笔记
1、多态:
概念:对象在不同时刻表现出来的不同状态。
针对引用型:
编译期间状态
运行期间状态
Person p = new Person();
举例:
水(水,冰,水蒸气)
前提:
A:要有继承关系或者实现关系
B:要有方法重写
C:要有父类引用指向子类对象,或者父接口对象指向子类对象
如:Fu fu = new Zi();
多态间的成员特点:方法有重写,而变量没有。
A:成员变量
编译看左边,运行也看左边
B:成员方法
编译看左边,运行看右边(所以真正执行的是子类中的方法)
多态的弊端:(继承的弊端:强耦合)
父类引用不能使用子类特有功能。
如果想使用的话:
(引用类型)
向上转型(小到大)Fu fu = new Zi();
向下转型(大到小)Zi zi = (Zi)fu;这个时候就能使用子类中的特有方法了
(基本类型)
隐式转换(小到大)
强制转换(大到小)
多态的好处:
提高代码的扩展性和可维护性
抽象类:类中有方法只有方法声明没有方法体的类。抽象类不能创建对象。
什么时候定义抽象类:如果一个类中有抽象方法,那么这个类就可以定义为抽象类。
抽象方法:只有方法声明没有方法体的方法,java提供了一种表示形式:抽象方法。用abstract修饰
抽象类的特点:
A:抽象类和抽象方法用关键字abstract修饰
B:有抽象方法的类一定是抽象类(或者接口)
抽象类中不一定有抽象方法,可以定义一个空的抽象类
C:抽象类不能被实例化(因为抽象类是具体的类,所以不能创建对象)
那么怎么实现实例化呢?
可以通过子类对象实现实例化。
D:如果一个类继承抽象类,那么这个要么本身是抽象类。要么这个类重写父类所有抽象方法
在继承中我们有时候为什么要继承抽象类呢?
答:抽象类的作用就是:强制要求子类必须完成某些功能。
抽象类中成员特点:
a:成员变量 可以有成员变量也可以有常量
b:构造方法 有构造方法(可以用于子类访问父类数据前,对数据进行初始化)。
c:成员方法 有抽象方法也可以有非抽象方法
抽象方法是为了让子类做某些事情
非抽象的方法是为了让子类继承,提高代码复用性
2、接口
定义:在抽象类中只有抽象方法。针对这种情况java提供了一种更加抽象的表示形式,接口。
用interface表示接口。
定义格式:
interface A
{
public abstract void eat();
}
有了接口该怎么用呢?
必须用具体的类来实现。
通过implements
格式:class 类名 implements 接口名
{ 重写接口中的抽象方法 }
接口多态:
Animal a = new Cat();
注意:接口不是类,我们只是把它看作类。接口是接口,类是类。
abstract不能和哪些关键字共存:final、static、private
基本特点:
1、接口不能被实例化
2、接口中的方法要么被子类实现,要么子类也是抽象类
注意:接口允许多继承(接口不是类)
接口中的成员特点:
成员变量 -- 接口中只有常量。(因为接口中的成员变量其实有默认修饰符 public static final 修饰。推荐永远自己给出修饰符)
构造方法 -- 没有构造方法(接口不需要对成员初始化,因为变量都是静态的,随着类的加载而加载)。任何类如果没有继承父类,那么这个类就继承了object类。
成员方法 -- 成员方法都是抽象的,默认就是被public abstract修饰的。推荐:永远自己给出修饰符。
类与接口的关系:
是实现关系,可以单实现,也可以多实现。
接口与接口的关系:
是继承关系,可以单继承,也可以多继承。
类与类之间的关系:
是继承关系,只可以单继承,课多层继承。
注意:所有类都直接或者间接的继承自object类
接口的思想特点:
接口是对外暴露的规则;
是程序的功能扩展;
接口的出现降低了耦合性;
接口可以用来多实现;
接口与类之间是实现关系,而且类可以继承一个类的同时实现多个接口;
接口与接口之间可以有继承关系;
抽象类与接口的区别;
1.成员特点:
抽象类:
成员变量:可以是变量,也可以是常量
构造方法:有构造方法
成员方法:可以是抽象方法,也可以是非抽象方法
接口:
成员变量:只能是常量。默认修饰符是:public static final
成员方法:只能是抽象方法,默认修饰符是:public abstract
构造方法:没有构造方法
2.关系特点不同:
类与类:
继承关系,只能单继承,可以多层继承
类与接口:
实现关系可以是单实现,可以是多实现
还可以在继承一个类的同时,实现多个接口
接口与接口:
继承关系,可以是单继承,也可以是多继承
3.设计理念的区别:
抽象类被继承,这个类中定义的是整个继承体现的共性内容。
接口被实现,这个接口中定义的是整个体现的扩展内容。
|
|