类存在父子关系:子类可以直接获取父类的成员属性和成员方法。
类的继承只能是单继承,一个类只能有一个父类,不能存在多个父类。
但是一个父类可以有多个子类。
继承采用extends语法:子类 extends 父类
public class ExtendsFun {
public static void main(String[] args){
Child1 child1 = new Child1();
System.out.println(child1.name);
Child2 child2 = new Child2();
System.out.println(child2.name);
}
}
class Parent{
String name = "ZhangSan";
}
class Child1 extends Parent{
}
class Child2 extends Parent{
}
如果遇到父类和子类有相同的属性,需要采用特殊的关键字区分,super & this, super表示父类的,this表示子类的,但是这两个关键字在静态方法中不能使用。
class Parent{
String name = "ZhangSan";
}
class Child1 extends Parent{
String name = "LiSi";
void test(){
System.out.println(super.name); // 父类的name: ZhangSan
System.out.println(this.name); // 子类的name: LiSi
System.out.println(name); // 默认的就是当前的属性: LiSi
}
}
然后关于父类的构造方法,父类对象是在子类对象创建前构建完成的,创建子类对象前,会调用父类的构造方法完成父类的创建。默认情况下,子类对象构建时,会默认调用父类的构造方法完成父类对象的创建,使用的是super的方式,只不过是JVM自动完成。如果父类提供了构造方法,那么VJM不会提供默认的构造方法,那么子类应该显示调用super方法构建父类对象。
class Parent{
String name = "ZhangSan";
// 构造方法
Parent(String name){
System.out.println("Parent...");
}
}
class Child extends Parent{
// 构造方法
Child(){
// 显示调用super方法来完成父类对象的构建
super("WangWu");
System.out.println("Child...");
}
}