面向对象 - Extends - 继承
面向对象编程中有三个非常重要的特征:继承,封装,多态
类存在父子关系:子类可以直接获取到父亲的成员属性和成员方法
类的继承只能是单继承,一个类只能有一个父类,不能存在多个父类
一个父类可以有多个子类
// 继承采用extends语法:子类 extends 父类
Child c = new Child();
System.out.println(c.name);
c.test();
}
}
class Parent {
String name = "zhangsan";
void test(){
System.out.println("test");
}
}
class Child extends Parent{
}
面向对象 - Extends - 继承
如果父类和子类有相同的属性,那么可以采用特殊的关键字进行区分
super & this (无法在静态代码块和静态方法中无法使用这两个关键字)
Child1 c = new Child1();
//System.out.println(c.name);
c.test();
}
}
class Parent1 {
String name = "zhangsan";
}
class Child1 extends Parent1 {
String name = "lisi";
void test() {
System.out.println(super.name);
System.out.println(this.name);
System.out.println(name);
}
}
----------------------------------------
zhangsan
lisi
lisi
构造方法
父类对象是在子类对象创建前完成的,创建子类对象前,会调用父类的构造方法完成父类的创建
默认情况下,子类对象构建时,会默认调用父类的构造方法完成父类对象的创建,使用的是super的方式,只不过JVM自动完成
如果父类提供了构造方法,那么JVM不会提供默认的构造方法,那么子类应该显示调用super方法构建父类对象
Child2 c1 = new Child2();
Child2 c2 = new Child2();
Child2 c3 = new Child2();
// new : 只会构建一个对象
}
}
class Parent2 {
String username;
Parent2(String name) {
username = name;
System.out.println("parent...");
}
}
class Child2 extends Parent2{
Child2() {
super("zhangsan");
System.out.println("child...");
}
}