#Java 继承# 子类无法直接访问父类的私有属性

100 阅读1分钟

例子:


class FatherClass {
    private int age;
    
}

class SonClass extends FatherClass{
    
    public void lookFatherAge(){
        System.out.println(age);
    }
}

public class Main{
    public static void main(String [] args){
        SonClass son = new SonClass();
        son.lookFatherAge();
    }
}

像上面这样写,会报错

error: age has private access in FatherClass System.out.println(age);

如果将 private 限制改为 protected 限制,子类是可以直接访问父类属性。 但一般不建议这样做,因为protected 扩大了属性的暴露范围,使得同一个包的其它类也可以访问到该属性。

一般可以改为下面这种写法,提供 public 修改或访问 age 属性:

class FatherClass {
    private int age;
    
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}

class SonClass extends FatherClass{
    
    public void lookFatherAge(){
        System.out.println(getAge());
    }
}

public class Main{
    public static void main(String [] args){
        SonClass son = new SonClass();
        son.setAge(18);
        son.lookFatherAge();
    }
}