1、继承是描述两个类的关系,如果两个类有重复的属性和方法,我们就可以使用继承的方式来实现/设计。 语法:
class 子类名称 extends 父类 {
属性名
方法名
}
(1)继承中,子类会把父类的所有方法和属性都继承下来(除了private)。
(2)子类继承父类后,还可以拥有自己的属性和方法。
(3)java中,只能单继承。
// 人
public class Person {
public String name = "人";
// 0未知,1男,2女
public String sex = "0";
public void eat() {
System.out.println("吃饭");
}
}
// 中国人
public class ChinesePerson extends Person {
public String name = "中国人";
// 生肖
public String shengxiao;
public void kungfu() {
System.out.println("功夫");
}
}
// 测试
public static void main(String[] args) {
ChinesePerson chinesePerson = new ChinesePerson();
// 子类没有定义sex属性,但是也可以使用,因为从父类继承了
System.out.println(chinesePerson.sex); // 0
// 子类、父类可以有同名属性
System.out.println(chinesePerson.name); // 中国人
// 子类可以有自己的属性
System.out.println(chinesePerson.shengxiao); // null
// 子类没有定义eat方法,但是可以使用,因为从父类继承了
chinesePerson.eat();
// 子类可以有自己的方法
chinesePerson.kungfu();
}
2、supper
(1)子类实例化的过程中,父类构造器先被调用,然后再调用子类的构造器(在子类构造器内部默认调 用super())。
(2)如果子类的构造器中调用了父类的有参构造方法,那么父类无参的构造器不会被调用。
(3) super()的调用要放在第一行。
(4)super可以表示父类的引用,我们可以使用super和this来区分父类和子类的同名属性和方法。
// 接着上述知识点的案例
// Chinese添加方法test()
public void test() {
// 优先找当前类的name属性
System.out.println(name); // 中国人
// 优先找当前类的sex属性,找不到就到父类找
System.out.println(sex); // 0
// 使用this关键字指定获取子类还是父类的同名属性
System.out.println(this.name); // 中国人
System.out.println(super.name); // 人
// 方法和属性一样
super.eat();
}