前言: 类的继承和多态是解放程序员双手的优秀方法,一定要掌握!
- 什么是继承?
已有父类创建子类的一种机制
- 为什么要继承?
- 减少代码冗余
- 方便后期更新代码
- 易于扩展
- 如何继承(extends关键字)?
class 父类 {
}
class 子类 extends 父类 {
}
- 需要注意的是 Java 不支持多继承,但支持多重继承。(即只能继承于一个父类或同时继承父亲和爷爷,但不能同时有多个爹)
- 继承的特点:
- 子类拥有父类非 private 的所有属性和方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以调用父类的方法。(super后面会讲到)
- 继承的优缺点:
提高了类之间的耦合性(缺点: 耦合度过高就会造成代码之间的联系越紧密,代码独立性越差, 牵一发而动全身)。
public class Girl {
private String name;
private int age;
public Girl(String girlName, String girlAge) {
//初始化属性值
}
public void eat() { //吃东西方法的具体实现 }
public void sleep() { //睡觉方法的具体实现 }
}
public class Sonia extends Girl{
}
- super 与 this 关键字
super关键字: super关键字对父类成员访问,并引用当前对象的父类。
this关键字:指向自己的引用。(谁调用指向谁)
// 创建一个女孩类
class Gril {
void eat() {
System.out.println("女孩在吃零食");
}
}
----------------------------------------
// Sonia继承了女孩类
class Sonia extends Gril{
void eat() {
System.out.println("Sonia也在吃零食");
}
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
}
----------------------------------------
public class Test {
public static void main(String[] args) {
Girl a = new Girl();
a.eat();
Sonia s = new Sonia();
s.eatTest();
}
}
-----------------------------------------
// 输出结果:
// 女孩在吃零食
// Sonia也在吃零食
// 女孩在吃零食
- 方法(覆盖)重写是什么? 它和方法重载有什么不同?
- 子类从父类继承的方法,需要在子类中重写该方法(新方法)
- 重写直发生在子类中,方法重载父子类里都可能发生
多态
- 什么是多态?
多态是同一个行为具有多个不同表现形式或形态的能力。
- 多态是如何体现的?
同一种对象引用不同的实例,得到不同的结果,体现了多态。
- 多态的优点有哪些?
1.消除类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性
- 多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
多态总结:
- 使用父类类型的引用指向子类的对象;
- 该引用只能调用父类中定义的方法和变量;
- 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将 会调用子类中的这个方法;(动态连接、动态调用);
- 变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
- 多态引用时,构造子类对象时的构造方法的调用顺序:
1,先调用超类的构造方法,多重超类首先调用最远超类的方法;
2,然后再执行当前子类的构造方法;
final 关键字:(后面内容无法被修改)
- final 关键字声明类可以把类定义为不能继承的,即最终类;
- 或者用于修饰方法,该方法不能被子类重写
- 修饰属性,属性无法被赋值
- 修饰对象,对象无法引用其他对象