前言: 类的继承和多态是解放程序员双手的优秀方法,一定要掌握!


  1. 什么是继承?

已有父类创建子类的一种机制

  1. 为什么要继承?
  1. 减少代码冗余
  2. 方便后期更新代码
  3. 易于扩展
  1. 如何继承(extends关键字)?
class 父类 {
} 
class 子类 extends 父类 {
}
  1. 需要注意的是 Java 不支持多继承,但支持多重继承。(即只能继承于一个父类或同时继承父亲和爷爷,但不能同时有多个爹)
  2. 继承的特点:
  1. 子类拥有父类非 private 的所有属性方法
  2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  3. 子类可以调用父类的方法。(super后面会讲到)
  1. 继承的优缺点:

提高了类之间的耦合性(缺点: 耦合度过高就会造成代码之间的联系越紧密,代码独立性越差, 牵一发而动全身)。

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{ 
}
  1. 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. 方法(覆盖)重写是什么? 它和方法重载有什么不同?
  1. 子类从父类继承的方法,需要在子类中重写该方法(新方法)
  2. 重写直发生在子类中,方法重载父子类里都可能发生

多态

  1. 什么是多态?

多态是同一个行为具有多个不同表现形式或形态的能力。

  1. 多态是如何体现的?

同一种对象引用不同的实例,得到不同的结果,体现了多态。

  1. 多态的优点有哪些?

1.消除类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性

  1. 多态存在的三个必要条件
  1. 继承
  2. 重写
  3. 父类引用指向子类对象:Parent p = new Child();

多态总结:

  1. 使用父类类型的引用指向子类的对象;
  2. 该引用只能调用父类中定义的方法和变量;
  3. 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将 会调用子类中的这个方法;(动态连接、动态调用);
  4. 变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
  5. 多态引用时,构造子类对象时的构造方法的调用顺序:
    1,先调用超类的构造方法,多重超类首先调用最远超类的方法;
    2,然后再执行当前子类的构造方法;

final 关键字:(后面内容无法被修改)

  1. final 关键字声明类可以把类定义为不能继承的,即最终类;
  2. 或者用于修饰方法,该方法不能被子类重写
  3. 修饰属性,属性无法被赋值
  4. 修饰对象,对象无法引用其他对象