Java继承中私有访问说明符的使用

Java继承中私有访问说明符的使用,java,inheritance,subclass,Java,Inheritance,Subclass,我们可以访问包含对私有数据成员的操作的超类方法并打印结果。但是为什么我不能打印超类的私有数据成员,而子类对象在我的主函数中调用它们呢?有人请给我解释一下 下面是一个例子 class SuperClass1 { private int a; private int b; SuperClass1(int p,int q) { a=p; b=q; } SuperClass1(SuperClass1 obj) {

我们可以访问包含对私有数据成员的操作的超类方法并打印结果。但是为什么我不能打印超类的私有数据成员,而子类对象在我的主函数中调用它们呢?有人请给我解释一下

下面是一个例子

class SuperClass1
{
    private int a;
    private int b;

    SuperClass1(int p,int q)
    {
        a=p;
        b=q;
    }
    SuperClass1(SuperClass1 obj)
    {
        a=obj.a;
        b=obj.b;
    }
    SuperClass1()
    {
        a=-1;
        b=-1;
    }

    int Vol()
    {
        return a*b;
    }
}

class SubClass1 extends SuperClass1
{
    int c;

    SubClass1(int p,int q,int r)
    {
        super(p,q);
        c=r;
    }
    SubClass1(SubClass1 obj)
    {
        super(obj);
        c=obj.c;
    }
    SubClass1()
    {
        super();
        c=-1;
    }
}


public class Super 
{
    public static void main(String[] args) 
    {
        SubClass1 obj1=new SubClass1();
        //System.out.println("The values of obj1 are:"+obj1.a+""+obj1.b+""+obj1.c);
        int vol=obj1.Vol();
        System.out.println("The volume is :"+vol);
    }
}
安全和

超类允许其子类仅使用公共和受保护的方法/字段

这使得超类的设计者可以在不破坏子类的正确性的情况下,更好地修改这些方法的实现

教科书示例是一个类。
使用该类的程序员只需要它的功能,他不关心实现是使用
字段还是使用
半径
θ
字段[表示复数的两种不同方式]

它允许
ComplexNumber
类的设计者在以后的版本中更改类时有更多的自由,也让用户不用担心:他不需要关心所有的细节,有些细节已经为他处理好了

奖金:注意,您可以通过使用来打破这种行为并访问私有字段和方法,但当您这样做时,所有赌注都将被取消,您需要自行负责。

安全和

超类允许其子类仅使用公共和受保护的方法/字段

这使得超类的设计者可以在不破坏子类的正确性的情况下,更好地修改这些方法的实现

教科书示例是一个类。
使用该类的程序员只需要它的功能,他不关心实现是使用
字段还是使用
半径
θ
字段[表示复数的两种不同方式]

它允许
ComplexNumber
类的设计者在以后的版本中更改类时有更多的自由,也让用户不用担心:他不需要关心所有的细节,有些细节已经为他处理好了


奖金:请注意,您可以通过使用来打破这种行为并访问私有字段和方法,但当您这样做时,所有赌注都将被取消,您需要自己承担责任。

如果没有示例,您的问题不是很清楚,但我怀疑“包含对私有数据成员的操作的方法”不是私有的。它们通过访问私有数据来工作并不重要——它们本身不是私有的。如果公共方法只能访问其他公共成员等,那么使用访问修饰符是毫无意义的


封装的全部要点是,只有类本身才应该关心实现细节,比如有问题的字段,但可以根据其公共(和受保护)API公开契约。类外的代码不应该关心私有实现细节。

如果没有示例,您的问题就不太清楚,但我怀疑“由私有数据成员上的操作组成的方法”不是私有的。它们通过访问私有数据来工作并不重要——它们本身不是私有的。如果公共方法只能访问其他公共成员等,那么使用访问修饰符是毫无意义的

封装的全部要点是,只有类本身才应该关心实现细节,比如有问题的字段,但可以根据其公共(和受保护)API公开契约。类外的代码不应该关心私有实现的细节。

说:

声明为私有的类的成员不会被继承 该类的子类。仅声明类的成员 protected或public由包中声明的子类继承 而不是在其中声明类的

所以,来回答你们的问题。不,子类无法访问私有成员。

表示:

声明为私有的类的成员不会被继承 该类的子类。仅声明类的成员 protected或public由包中声明的子类继承 而不是在其中声明类的


所以,来回答你们的问题。不,子类不能访问私有成员。

私有成员不能继承;只有受保护的成员和公共成员才是

如果可能,您可以执行以下操作之一:

  • 保护超类的私有属性
  • 将私有属性的getter(和setter,如果需要)公开

  • 私人成员不被继承;只有受保护的成员和公共成员才是

    如果可能,您可以执行以下操作之一:

  • 保护超类的私有属性
  • 将私有属性的getter(和setter,如果需要)公开

  • 是的,我明白你的意思。超类数据成员声明为私有仅用于安全和封装。除此之外,公共和私有之间没有其他区别。是的,我明白你的意思。超类数据成员声明为私有仅用于安全和封装。除此之外,公共和私有之间没有其他区别和private。我正在尝试打印导致错误的注释部分中的超类私有成员。我正在尝试打印导致错误的注释部分中的超类私有成员。