1、继承的本质:在已有类的功能上继续进行功能的扩充
2、继承的实现:关键词:extends;语法:class 子类 extends 父类 {}
注意:子类也可以称为派生类,父类也可称为超类
继承的实现:
package Test;
class Person{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}class Student extends Person{}public class Demo3 {public static void main(String[] args) {Student stu = new Student();stu.setName("里斯");stu.setAge(18);System.out.println("姓名:"+stu.getName() + "、年龄:" + stu.getAge());//结果:姓名:里斯、年龄:18}
}
通过extends关键词,子类Student继承了父类Person的方法和实现。继承实现的主要目的是在于子类可以重用父类中的结构,并且也可以实现功能的扩充,同时强调:子类可以定义更多的内容,并且描述的范围更小
子类扩充案例:
package Test;
class Person{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}class Student extends Person{private String school;public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}
}public class Demo3 {public static void main(String[] args) {Student stu = new Student();stu.setName("里斯");stu.setAge(18);stu.setSchool("社会大学");System.out.println("姓名:"+stu.getName() + "、年龄:" + stu.getAge() + "、大学:" + stu.getSchool());//结果:姓名:里斯、年龄:18}
}
注意:子类可以操作父类的属性
3、子类实例化对象的流程
package Test;
class Person{public Person(){System.out.println("Person构造方法");}}class Student extends Person{public Student(){System.out.println("Student构造方法");}
}public class Demo3 {public static void main(String[] args) {//只实例化子类对象new Student();//结果:Person构造方法//Student构造方法}
}
从上面的简单程序中可以看出,我们实例化子类对象时,子类的构造方法会先调用父类的构造方法。即默认情况下的子类对象实例化流程会自动实例化父类对象。实际上这个时候就相当于子类的构造方法里面隐含了一个"super()"方法的调用。
super():表示的就是子类构造调用父类构造的语句,该语句只允许放在子类构造方法的首行。在默认情况下,子类只会调用父类中的无参构造方法,所以写与不写“super()”区别不大,但是如果说你的父类里面没有提供无参构造,这时需要使用“super()”明确调用有参构造。
package Test;
class Person{private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}
}class Student extends Person{private String school;public Student(String name,int age,String school){//明确调用父类构造,有参构造super(name, age);this.school = school;}}public class Demo3 {public static void main(String[] args) {//只实例化子类对象new Student("里大",30,"社会");//结果:Person构造方法//Student构造方法}
}
结论:在实例化子类对象的同时,一定会实例化父类对象。目的时为了所有的属性可以进行空间的分配。
super与this都可以调用构造方法,super()是由子类调用父类的构造,而this是调用本类构造,并且一定都要放在构造方法首行,所以两个语句不允许同时出现。