继承的作用:继承可以使用现有类的全部功能,并在无需重新编写原来类的情况下对功能进行扩展
1.继承的实现
在Java中,继承用extends关键字实现,定义的语法:class 子类 extends 父类
举例:未扩重新属性
class People{
private String Name;
private int age;
public void setName(String name) {
Name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return Name;
}
public int getAge() {
return age;
}
}
//定义一个子类
class Student extends People{
}
public class Test{
public static void main(String[] args) {
Student stu = new Student();
stu.setName("Steven");
stu.setAge(20);
System.out.println(stu.getName()+" "+stu.getAge());
}
}
运行结果:
通过上述代码的运行,当发生子类继承父类后,子类可直接继承父类的操作,实现代码的重用。
子类最起码可以维持和父类相同的功能。
举例:子类继承父类并实现功能扩展
class Person{
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
//Student类继承Person类
class Student extends Person{
private String school;//扩展功能
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return school;
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("Steven");
student.setAge(18);
student.setSchool("陕科大");
System.out.println("姓名:"+student.getName()+" 年龄:"+student.getAge()+" 学校:"+student.getSchool());
}
}
运行结果:
在运行代码时,先调用父类构造方法再调用子类构造方法
2.继承的局限性
- 子类对象在进行实例化之前一定会首先实例化父类对象
- 默认调用父类的构造方法后再调用子类的构造方法进行子类对象初始化
- Java只允许单继承,不允许多继承
- 如果父类中没有提供无参构造,那么必须使用super()来明确指出要调用的父类构造方法
- Java不允许多继承,但允许多层继承(例如:C同时继承A和B时,先创建A,B继承A,C继承B)
3.显示继承和隐式继承
用extends来实现,private修饰的是隐形继承,子类并不知道有这个属性,public修饰的为显性继承,java中只能单继承,并且子类覆写父类方法时不能拥有比父类更严格的访问权限。
举例:
class Person{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
class Strudent extends Person{
public void fun(){
System.out.println(getName());
}
}
public class Test {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("Jane");
System.out.println(stu.getName());
stu.fun();
}
}
运行结果:
父类中的属性被子类所继承,但是子类能够使用的是所有非private操作,而所有的private操作无法被直接使用,称为隐式继承