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由包中声明的子类继承 而不是在其中声明类的
所以,来回答你们的问题。不,子类不能访问私有成员。私有成员不能继承;只有受保护的成员和公共成员才是 如果可能,您可以执行以下操作之一:
私人成员不被继承;只有受保护的成员和公共成员才是 如果可能,您可以执行以下操作之一:
是的,我明白你的意思。超类数据成员声明为私有仅用于安全和封装。除此之外,公共和私有之间没有其他区别。是的,我明白你的意思。超类数据成员声明为私有仅用于安全和封装。除此之外,公共和私有之间没有其他区别和private。我正在尝试打印导致错误的注释部分中的超类私有成员。我正在尝试打印导致错误的注释部分中的超类私有成员。