生活中的继承
在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。
例如,食草动物和食肉动物都属于动物,程序中便可以描述为食草动物和食肉动物继承自动物,动物是父类,食草动物和食肉动物是子类。
同理,兔子和羊继承自食草动物,食草动物又成了父类,兔子和羊是子类;狮子和豹继承自食肉动物,食肉动物又成了父类,狮子和豹是子类。
子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性。
程序中的继承
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类。子类继承父类的属性和方法,使得子类对象(实例)具有父类的特征和行为。
继承的语法格式:
class 父类{
……
}
class 子类 extends 父类{
……
}
例1:
class Animal{
protected String name;
protected int age;
public void eat(){
System.out.println(name+"正在进食。");
}
}
class Herbivore extends Animal{ //食草动物类
}
public class Test{
public static void main(String[] args) {
Herbivore h1=new Herbivore();
h1.name="兔子小白";
h1.eat();
}
}
上面的代码运行结果:
兔子小白正在进食。
上面的食草动物类Herbivore继承自动物类Animal,所以即使Herbivore类中一行代码都没有,但它仍拥有从父类那里继承过来的属性和方法,所以在main方法中可以给Herbivore类的对象h1的属性赋值,调用其方法。
当然,子类也是可以拥有自己的属性和方法的:
class Animal{ //父类,动物类
protected String name;
protected int age;
public void eat(){
System.out.println(name+"正在进食。");
}
}
class Herbivore extends Animal{ //子类,食草动物类
String color;
public void show(){
System.out.println(name+"的皮毛是"+color);
}
}
class Carnivore extends Animal{ //子类,食肉动物类
String food;
public void hunt(){
System.out.println(name+"正在狩猎食物");
}
}
public class Test{
public static void main(String[] args) {
Herbivore h1=new Herbivore();
h1.name="兔子小白";
h1.color="白色";
h1.eat();
h1.show();
}
}
上面的代码中,定义了父类Animal(2个属性、1个方法),子类Herbivore、Carnivore,子类从父类那里继承了父类的成员(红色字部分的2个属性、1个方法),自己又各自另外定义了属性和方法(蓝色字部分的1个属性、1个方法)。
几个要点
- 在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个父类。
- 多个类可以继承一个父类,也就是说一个类可以有多个子类。
- 在Java中,多层继承也是可以的,即一个类的父类可以再继承另外的父类。例如,C类继承自B类,而B类又可以继承自A类,这时,C类也可称作A类的子类。
- 注意父类成员的访问权限,子类不能访问父类中private级成员,位于不同包的子类只能访问父类中protected和public级的成员。