继承
继承让我们更加容易实现类的扩展。 比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。实现了代码的重用
从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:
上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;在我们编程中,如果新定义一个son类,发现已经有father类包含了我们需要的属性和方法,那么sont类只需要继承father类即可拥有father类的属性和方法。
this和super关键字的作用
this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;this可以调用成员变量,不能调用局部变量;this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第一条语句。,而且在静态方法当中不允许出现this关键字。
super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)
super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。
继承练习:
public class Test01 {
public static void main(String[] args) {
//实例化一个子类对象
son stu1 = new son("wanwna",2020,"软件工程");//子类对象拥有了父类属性
stu1.study();//子类方法
stu1.rest();//子类继承父类方法
}
}
class father{
//定义两个父类属性
private String name;
private int id;
//定义父类的study方法
public void study(){
System.out.println("假期学java!");
}
}
//子类继承父类
class son extends father{
//定义一个子类属性
private String major;
//定义子类的rest方法
public void rest(){
System.out.println("学习要注意劳逸结合!");
}
//继承父类后,子类可以拥有父类的属性
public son(String name,int id,String major) {
this.major = major;
super.study();//super可以调用直接父类的成员方法
System.out.println("大家好,我是"+name+" 我的学号是:"+id+" 我的专业是"+major);
}
}
运行结果:
假期学java!
大家好,我是wanwna 我的学号是:2020 我的专业是软件工程
假期学java!
学习要注意劳逸结合!
附:
instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则,返回false。 System.out.println(stu1 instanceof father); System.out.println(stu1 instanceof son);
继承的使用要点
1.父类也称作超类、基类、派生类等。
2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
3.Java中类没有多继承,接口有多继承。
4.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。