java—父类中的私有对象是否可以使用super关键字由子类继承

hjzp0vay  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(327)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
我想问是否有可能父类的私有对象可以通过super关键字被子类继承。
我问是因为我有一个学校的任务,我认为私人物品是不能继承的。我也收到了一个错误,在我的代码,我努力找到任何在线帮助我这一点。
例如,我的父类有:

public class Person {
private String firstName;

在我的小班里我有:

public class Lecturer extends Person {
//....

super.firstName = firstName;

netbeans警告我“firstname有私有访问权”。

nwsw7zdq

nwsw7zdq1#

简而言之:不,它们不能被继承。
只能从声明类的任何位置访问私有变量。这意味着你的 super.firstName = firstName 实际上有两个错误:super.firstname是私有的,因此无法访问,并且从子类的Angular 来看firstname字段不存在。
直接访问私有变量或方法的唯一方法是通过反射,即使这样,您也必须使用setaccessible(boolean)方法,这可能会被securitymanagers阻止。
如果有访问私有变量的setter(或参数化构造函数),则可以从其他类使用它(由于方法是公共的)。

waxmsbnn

waxmsbnn2#

你必须这样做
人员类别:

public class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

单独文件中的子类:

public class Employee extends Person {

    public Employee(String name) {
        super(name);
    }

    public void test() {
        System.out.println("getName = " + getName()); // works
        // can also do super, although it's not necessary
        System.out.println("getName = " + super.getName());
    }
}

如果不想使用super.method(),而是super.variable,则需要将name变量更改为private,而不是package private,方法是从其声明中删除“private”:

public class Person {

    String name;

    public Person(String name) {
        this.name = name;
    }
}

雇员

public class Employee extends Person {
    public Employee(String name) {
        super(name);
    }

    public void test() {
        System.out.println("this.name = " + name);
    }
}

我之前的回答使用了一个内部类,但这不应该被使用,因为这是对内部类的误用。

相关问题