子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
class Father { //私有属性 private int num = 10; public int num2 = 20; //私有方法 private void method() { System.out.println(num); System.out.println(num2); } public void show() { System.out.println(num); System.out.println(num2); } } class Son extends Father { public void function() { //err //num 在 Father 中是 private 访问控制 //子类不能继承父类私有成员变量 //System.out.println(num); System.out.println(num2); } } public class ExtendsDemo { public static void main(String[] args) { Son s = new Son(); //子类不能继承父类的私有方法 //s.method(); s.show(); s.function(); } }
调用子类构造方法时默认访问父类中无参构造方法(子类初始化之前,一定要先完成父类数据的初始化)
如果在父类中有公有的get/set方法,可以访问到父类中的私有属性:通过显式调用父类带参构造方法
//抽象动物类 abstract class Animal { //姓名 private String name; //年龄 private int age; public Animal() {} public Animal(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //定义一个抽象的方法 public abstract void eat(); } //定义具体的狗类 class Dog extends Animal { public Dog() {} public Dog(String name,int age) { //试图这样对name和age初始化会报错 //name 在 Animal 中是 private 访问控制 //this.name = name; //this.age = age; //通过访问父类带参构造来初始化 super(name,age); } public void eat() { System.out.println("Dog"); } } //测试类省略