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是调用本类构造,并且一定都要放在构造方法首行,所以两个语句不允许同时出现。
4、继承定义的相关限制
要求:
1)Java之中不允许多重继承,只允许多层继承
2)在进行继承关系定义的时候,实际上子类可以继承父类中的所有操作结构。但是对于私有操作属于隐式继承,而所有的非私有操作属于显示继承。
5、final在Java中表示的意思是最终,也可称为完结器。
在使用final关键字声明类、属性、方法时,需要注意以下几点:
1)使用final声明的类不能有子类;
2)使用final声明的方法不能被子类所覆写;
3)使用final声明的变量即成为常量,常量不可以修改