继承是 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.在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。