继承是 Java 面向对象编程技术的一块基石,是面向对象的三大特征之一,也是实现软件复用的重要手段,继承可以理解为一个对象从另一个对象获取属性的过程。
1.概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
2.生活中体现出继承的示例:
兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
3.IS-A 关系
IS-A 就是说:一个对象是另一个对象的一个分类。
1.在Java之中,如果要实现继承的关系,可以使用如下的语法:
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类 {
}
class 子类 extends 父类 {
}
2.示例:
父类:Animal类
- public class Animal{
- private String name;
- private int health;
- private int love;
-
- public Animal() {
- }
-
- public Animal(String name, int health, int love) {
- this.name = name;
- this.health = health;
- this.love = love;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getHealth() {
- return health;
- }
-
- public void setHealth(int health) {
- this.health = health;
- }
-
- public int getLove() {
- return love;
- }
-
- public void setLove(int love) {
- this.love = love;
- }
-
- void print() {
- System.out.println("宠物信息:昵称:" + this.name + ",健康值:" + this.health
- + ",亲密度:" + this.love);
- }
- }
- public class Dog extends Animal{
-
- // 品种
- private String strain;
-
- public Dog() {
- }
-
- public Dog(String name, int health, int love, String strain) {
- super(name, health, love);
- this.strain = strain;
- }
-
- public String getStrain() {
- return strain;
- }
-
- public void setStrain(String strain) {
- this.strain = strain;
- }
-
-
-
- public void print(){
- // System.out.println("宠物信息:昵称:" + this.getName() + ",健康值:" + this.getHealth()
- // + ",亲密度:" + this.getLove()+",品种:"+this.strain);
- super.print();
- System.out.println("品种:"+this.strain);
- }
-
- }
1.提高了代码的复用性
继承是Java中实现代码重用的重要手段之一。子类继承父类后可以使用父类的方法,因此可以大大节省代码量。
2.提高了代码的可维护性
由上面的代码可知Animal类就可以作为一个父类,然后Dog类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码)。
1.Java中只支持单根继承,即一个类只能有一个直接父类;Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。
2.在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private )操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
3.在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。