继承中的私有字段

问题描述 投票:0回答:1

我有一个关于这个主题的问题对我来说有点难以理解。碰巧子类不继承类的私有属性。但是,我可以使用方法来访问它们。

令我感兴趣的是,它是否间接继承了它们?考虑这个案例:

package Inheritance;

public class Bike {
    private String model;

    void setModel(String model){
        this.model = model;
    }

    String getModel(){
        return model;
    }
}
package Inheritance;

public class MountainBike extends Bike{

    public static void main(String[] args){
        MountainBike mountainBike = new MountainBike();

        mountainBike.setModel("rtx500");

        System.out.println(mountainBike.getModel());
    }
}

发生的事情是我创建了一个 MountainBike 类型的对象。从理论上讲,我应该无法访问这些属性,因为我没有从超类继承它们。我使用 setter 将其初始化为自己的对象(不属于超类的对象,而是属于子类)。如果私有字段不应该被继承,子类如何将其初始化为自己的属性(即继承)?

感谢您的帮助!

java oop inheritance encapsulation member
1个回答
0
投票

我应该无法访问这些属性,因为我没有从超类继承它们。

这是正确的。 您无法从子类或除超类之外的任何其他地方访问

model
字段 diretlu。

我使用 setter 将其初始化为自己的对象(不属于超类的对象,而是属于子类)。

是的,您确实使用了 setter,但“作为其自己的”是不正确的。 setter 为您的子类提供了一种将值传递给超类的方法,而超类则采用解析后的值并将其写入(仍然)私有

model
字段。

如果私有字段不应该被继承,子类如何将其初始化为自己的属性(即继承)?

该字段不被继承,它仍然属于超类。

如果您将代码更改为此,它可能会帮助您理解

model
字段属于超类:

package Inheritance;

public class Bike {
    private String model;

    void setModel(String model){
        this.model = model;
    }

    String getModel(){
        return model;
    }

    public void printSuperclassModel() {
        System.out.println("Model from superclass is " + model);
    }
}
package Inheritance;

public class MountainBike extends Bike{

    public void printSubclassModel() {
        System.out.println("Model from subclass is " + getModel());
    }


    public static void main(String[] args){
        MountainBike mountainBike = new MountainBike();

        mountainBike.setModel("rtx500");

        System.out.println(mountainBike.getModel());

        printSuperclassModel();
        printSubclassModel();

        mountainBike.setModel("test2");
        printSuperclassModel();
        printSubclassModel();
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.