学习Java中遇到的继承问题

子类只能继承父类所有非私有的成员(成员方法和成员变量)

子类不能继承父类的构造方法,但是可以通过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");
    }
}

//测试类省略

猜你喜欢

转载自www.cnblogs.com/pannnn/p/10356279.html