Java语言通过extends关键字来实现继承。
学生与人的继承关系是常见的一种单继承,学生是子类,人是父类。下图显示Person类与Student类的关系结构。
Student类和Person类的继承关系
下列程序演示了Student类与Person类的继承关系。第2行定义了父类Person,第14行定义Person类的子类Student。通过继承机制,第29行子类 Student对象hh调用父类的getPerson()方法。
package chapter02;
class Person{
private String name;
private int age;
public Person(){ }
public Person (String name,int age){
this.name = name;
this.age = age;
}
public String getPerson(){
return "姓名:" + this.name + ",年龄:" + this.age;
}
}
class Student extends Person{
private String className;
public Student(){ }
public Student(String name,int age,String className){
super(name,age);
this.className = className;
}
public String getStudent(){
return this.getPerson() + ",班级:" + this.className;
}
}
public class example19 {
public static void main(String[] args) {
Student hh = new Student("黑黑",18,"计科二班");
System.out.println(hh.getStudent());
System.out.println(hh.getPerson());
}
}
程序运行结果如下。
Person类默认继承Object类
子类从父类继承所有非private的数据成员和成员方法作为自己的成员,可以直接访问它们;但子类不能直接访问父类的私有成员,如需访问父类私有数据成员,一般通过setter和getter方法实现。如果定义类时没有使用extends继承父类,默认该类是系统类Object的子类。
Java程序中,Object是根类,它是所有类的祖先类。如果一个类没有继承一个父类,系统自动指定该类的父类是Object。
下列程序演示了Person类默认继承Object类。第6行调用toString()方法,第7行调用hashCode()方法,这两个方法并没有定义在Person类中,也没有从其他类继承。Java继承机制中,Object是所有类的父类,所有类都直接或间接继承了Object类,toString()和hashCode()方法是Object类中定义的成员方法。
package chapter02;
class Person{ }
public class example20 {
public static void main(String[] args) {
Person hh = new Person();
System.out.println(hh.toString());
System.out.println(hh.hashCode());
}
}
运行结果如下图所示(一种运行结果)。
注意:Java规定类之间只允许单继承,不支持多重继承,即一个子类只能继承一个父类。但是允许多层继承,即一个子类可以有一个父类,一个父类还可以有一个父类。