类的继承
为描述和处理我的信息,定义类Person:this
public class Person { public String name; public int age; public Date birthDate; public String getInfo() { ... } }
为描述和处理学生信息,定义类Student:code
public class Student { public String name; public int age; public Date birthDate; public String school; public String getInfo(){ ... } }
经过继承,简化Student类的定义:对象
public class Person { public String name; public int age; public Date birthDate; public String getInfo() {...} } public class Student extends Person{ public String school; }
Student类继承了父类Person的全部属性和方法,并增长了一个属性school。Person中的属性和方法,Student均可以使用。
类的继承
Java只支持单继承,不容许多重继承
一个子类只能有一个父类
一个父类能够派生出多个子类
子类继承了父类,就继承了父类的方法和属性。
在子类中,能够使用父类中定义的方法和属性,也能够建立新的属性和方法。同时能够重写父类的方法
于是,子类一般比父类的功能更多。
在Java 中,继承的关键字用的是“extends”,即子类是对父类的“扩展”。
注意:全部类的基类都是Object
四种访问权限修饰符
super关键字
在Java类中使用super关键字来引用父类的成分
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造方法继承
public class Person { private String name; private int age; public String getInfo() { return "Name: " + name + "\nage: " + age; } } public class Student extends Person { private String school = "New Oriental"; public String getSchool(){ return school; } public String getInfo() { // 调用父类的方法 return super.getInfo() +"\nschool: " +school; } }
父类构造方法的调用
子类继承父类全部的成员变量和成员方法,但不继承父类的构造方法
在子类的构造方法中可以使用super(参数列表)形式的语句调用父类的构造方法
若是子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
若是子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错get
public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) { this.name = name; this.age = age; this.birthDate = d; } public Person(String name, int age) { this(name, age, null); } public Person(String name, Date d) { this(name, 30, d); } public Person(String name) { this(name, 30); } // ……
子类对象实例化全过程编译