继承是面向对象的三大特征之一,使用extends关键字可以使一个类继承另一个类,Java中类只能单继承。
public class Father {
}
class Son extends Father{
}
子类继承父类可以获得父类所有的属性和方法,但用private修饰的变量和构造器无法使用
//创建一个父类
class Father{
//成员变量
String name = "father";
public void test() {
System.out.println(name);
};
}
//子类继承父类
class Son extends Father{
}
public class Test {
public static void main(String[] args) {
//创建子类实例
Son s = new Son();
//调用test方法
s.test();
}
}
0.png
通过子类实例化对象调用test方法,子类中没有test方法会自动向父类中找test方法,所有的类都直接或间接的继承Object类
为什么要继承
继承可以减少大量重复的代理,使代码更简洁,提高代码的可复用性
super
当子类重写父类方法时,我们无法直接调用到父类方法,需要通过super关键字来调用
//创建一个父类
class Father{
//成员变量
String name = "father";
public void test() {
System.out.println(name);
};
}
//子类继承父类
class Son extends Father{
@Override
public void test() {
System.out.println("son");
//在子类的test方法中通过super调用父类的test方法
super.test();
}
}
public class Test {
public static void main(String[] args) {
//创建子类实例
Son s = new Son();
//调用test方法
s.test();
}
}
1.png
super可以调用非私有的父类方法父类属性,在构造器中第一句必定是super();调用父类无参构造器,没有写编译器会默认添加,写在非第一行会编译错误
//子类继承父类
class Son extends Father{
// 构造器
public Son() {
// super(); 隐式语句
}
}