面向对象的三大特征:封装,继承,多态。

继承是Java中一般到特殊的关系, 是一种子类到父类的关系。
例如:
学生类继承了人类。
猫类继承了动物类。

被继承的类称为:父类/超类。
继承父类的类称为:子类。


继承(extends)

继承的作用?

“可以提高代码的复用”,相同代码可以定义在父类中。
然后子类直接继承父类,就可以直接使用父类的这些代码了。
(相同代码重复利用)

子类更强大:子类不仅得到了父类的功能,它还有自己的功能。


继承的格式

public class 子类 extends 父类{}

父类:也被称为超类、基类;
子类:也被称为派生类;

继承的特点

  • 子类可以有自己特定的内容;
  • 子类可以有父类的内容;

继承的好处

提高了代码的复用性(多个类相同的成员可以放到同一个类中);
提高了代码的维护性(如果方法的代码需要修改,修改一处即可);

继承的弊端

继承让类与类之间产生了关系,类的耦合性增强,父类变化时,子类不得不变化,削弱了子类的独立性。

什么时候用继承?

继承提现关系:is a
假设法:如果有A和B类,满足A是B的一种或者B是A的一种,说明他们存在继承关系,这个时候可以考虑继承提现,否则不能滥用继承。
举例:苹果和水果。猫和动物。

继承中变量访问特点

在子类方法中访问一个变量

  • 子类局部范围找
  • 子类成员范围找
  • 父类成员范围找
  • 如果都没有就报错
public class Son extends Father{

	public int height = 170;
	
	public void show() {
		System.out.println(age);
		System.out.println(height);
		System.out.println("调用子类");
	}
}
public class Father {

	public int age = 40;
	
	public void fatherShow() {
		System.out.println("调用父类");
	}
}
public class Test {
	public static void main(String[] args) {
		Father f = new Father();
		f.fatherShow();

		Son s = new Son();
		s.show();
		s.fatherShow();
	}
}

继承中构造方法的访问特点

子类中所有构造方法默认都会访问父类中无参的构造方法:

  • 子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
  • 每一个子类构造方法的第一条语句默认都是:super()

父类中没有无参构造方法,只有带参构造方法:

  • 子类可指定super关键字使用父类带参构造方法:super(参数)
public class Father {

	public Father() {
		System.out.println("父类无参构造方法被调用");
	}

	public Father(int age) {
		System.out.println("父类有参构造方法被调用");
	}

}
public class Son extends Father {

	public Son() {
		System.out.println("子类无参构造方法被调用");
	}

	public Son(int age) {
		// 指定调用父类有参构造方法:
		// super(10);
		System.out.println("子类有参构造方法被调用");
	}

}
public class Test {
	public static void main(String[] args) {

		Son s = new Son();
		// 显示:
		// 父类无参构造方法被调用
		// 子类无参构造方法被调用

		Son s1 = new Son(30);
		// 显示
		// 父类无参构造方法被调用
		// 子类有参构造方法被调用
	}
}

继承中成员方法的访问特点

通过子类访问一个方法:

  • 子类成员范围找
  • 父类成员范围找
  • 都没有就报错