1.多态:
对象在不同时刻表现出来的不同状态。--------父类子对象。(水,水蒸气,冰)
前提条件:
1.要有继承或实现关系。
2.要有方法的重写。
3.要有父类引用指向子类对象。
2.多态间的成员特点(掌):方法有重写,而变量没有。
A:成员变量:编译、运行都看左边。
B:成员方法:编译看左边,运行看右边。
3.多态的弊端即解决方案:
弊端:父类的引用不能使用子类特有的方法
解决:强制类型转换
多态 Fu f = new Zi();--向上转型
Zi z = (Zi)f;---向下转型
4.类型转换异常(掌):
ClassCastException 当试图将对象强制转换成不是实例的子类时,出现转换异常。
---避免问题:
向下转型只能转换成对象本来就是的类型或者父类型。
5.多态的好处(理解):
为了提高代码的扩展性和可维护性。
开发原则:对扩展开放,对修改关闭。
6.抽象类和抽象方法(抽象都掌我):
抽象方法:只有方法声明,没有方法体,用absouct修饰。public abstract void animal();
抽象类:有抽象方法的类就是抽象类。
抽象类的基本特点:
1.抽象类和抽象方法必须使用abstract关键字修饰
2.有抽象方法的类一定是抽象类(或者接口),但是抽象类中可以没有抽象方法。
3.抽象类不能被实例化。-----通过子类对象进行初始化(多态方法)。
4.如果一个类继承抽象类,那么
这个类要么本身是抽象类。
要么这个类重写父类的所有抽象方法。
在继承中,我们为什么有些时候,回旋者父类是抽象类?
作用:强制要求子类必须完成某些功能。
最大特点:强制要求子类完成某些功能。
7.抽象类的成员特点:
成员变量:可以有常量,可以有常量
构造方法:有构造方法,
既然不能被实例化,那么有构造方法有什么用?
可以用于子类访问父类数据前,对父类数据进行初始化。
成员方法:
可以有抽象方法,也可以有非抽象方法。
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
8.抽象关键字abstract不可以和那些关键字共存?
1.final:因为被final修饰的类不能被继承,被final修饰的方法不能被重写。
2.private:因为被private修饰的方法不能重写,但是abstract方法要求重写。
3.static:因为一个方法要是同时被static 和abstract修饰,那么这个方法就可以类名.
方法名 调用. 但是此方法是抽象的,调用也无意义,所以就导致static 和abstract不能共存.
9.接口:
针对一个类中所有的方法都是抽象方法这种情况,java提供了一种技术,接口。
定义: interface B {全部都是抽象方法} ---- 接口不是类,更像是一个规则的体现(不继承自Object)
类继承自类的格式: class A extends B
类实现接口的格式:class A implements
接口:是一种特殊的抽象类。比抽象类更抽象。因为它里面的方法都是抽象的。
接口的基本特点:
1.接口不能被实例化。
2.实接口中的方法:要么被子类重写,要么子类也是抽象的。
接口方法都是静态的,随着类的加载而加载,所以没有构造方法。
接口的成员特点:
成员变量:接口中只有常量。
因为接口的成员变量有默认修饰符 public static final(推荐自己给出)
构造方法:
没有构造方法。
任何类如果没有继承父类,那么这个类就继承自Object类
成员方法:
接口中的方法都是抽象的。
接口中的成员方法有默认修饰符:public abstract(推荐自己给出)
10.类与接口的关系(掌)
类与类关系: 继承关系。只能单继承,或者多层继承。
类与接口的关系:实现关系。可以单实现,也可以多实现。
并且还可以在继承一个类的同时,实现多个接口。
接口与接口的关系:继承关系。可以单继承,也可以多继承。
所有类都直接或者间接的继承自Object类,Object类是所有类的超类。
11.接口的思想特点(理解):
接口是对外暴露的规则。
程序的功能扩展
降低耦合性
多实现,弥补了java单继承
12.抽象类与接口的区别:
1)成员特点:
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法。
成员方法:可以是抽象方法,也可以是非抽象方法。
接口:
成员变量:只能是常量。
默认修饰符:public static final
成员方法:只能是抽象方法
默认修饰符:public abstract
2)关系特点
类与类:
继承关系,只能单继承,可以多继承。
类与接口:
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时,实现多个接口。
接口与接口:
继承关系,可以单继承,可以多继承。
3)设计理念的区别:
抽象类被继承,这个类中定义的是整个继承体现的共性内容。 体现 : is a
接口被实现,这个接口中定义的是整个体现的扩展内容。 体现: like a |
|