扩展私有类时。公共和受保护的班级成员是否变得私密。如果没有任何解释。
答案 0 :(得分:1)
如果扩展嵌套的私有类,则不会更改成员的公共/受保护修饰符。这是一个例子:
public class Clazz {
private static class NestedClazz {
public int value = 123;
}
public static class NestedClazzExt extends NestedClazz {
}
}
您现在可以从外部访问继承的成员:value
public static void main(String[] args) {
NestedClazzExt nestedClazz = new Clazz.NestedClazzExt();
System.out.println(nestedClazz.value);
}
答案 1 :(得分:0)
你可以在课堂上创建私人课程。我们称之为嵌套classe。表示类中的类。概念本身就是说你可以在另一个类中创建私有类。私有类将充当外部类的数据成员。 所以,你不能扩展私人课程。
答案 2 :(得分:0)
Based on your query I tried to prepare a simple class.
public class pvtClass {
private class As {
public String abc = "private attribute";
public void print(){
System.out.println("privateClass");
}
}
class Ab extends As{
public String ab = "extended attribute";
public void printAb(){
System.out.println("extended class");
print();
System.out.println(abc);
}
}
public static void main(String as[]){
Ab ab1 = (new pvtClass()).new Ab();
As as1 = (new pvtClass()).new As();
ab1.printAb();
as1.print();
System.out.println(as1.abc);
}
}
If you have a look at this class, I have a private class named "As" which has public attribute and public methods. I have another class named "Ab" which extends "As". I have written a main method to invoke the private attribute and methods.
下面的是代码段的输出:
扩展课程 privateClass 私有属性 privateClass 私人属性
答案 3 :(得分:0)
类成员的访问权限和对类型本身的访问权之间存在差异。
public class C {
private class InnerP1 {
public void m() {
System.out.println("InnerP1.m()");
}
}
private class InnerP2 extends InnerP1 {
public void p() {
this.m();
System.out.println("InnerP2.p()");
}
}
public InnerP1 strange() {
return new InnerP2();
}
}
在此示例中,界面I
在外部类C
中可见。从InnerP1
外部看不到课程InnerP2
和C
。 Jave本身不限制您在公共接口中使用的类型的可见性。类strange()
的方法C
返回类InnerP1
的结果。由于C
之外我们对InnerP1
类没有任何了解,除了它是Object
的子类型之外,我们唯一能做的就是使用strange()
的结果作为Object
。
public class D {
public static void main(String[] args) {
C c = new C();
Object o = c.strange();
if(o.equals(c.strange())) {
System.out.println("Strange things are going on here!");
}
}
}
正如@KnusperPudding已经指出的那样,公共成员的可见性没有改变,我们可能对类型本身没有足够的知识来访问它们。
答案 4 :(得分:0)
不能通过子类别来限制对成员的访问。当你将一个类标记为私有时,那么通过类名访问是受限制的,即相同的.java
文件,但是一旦你有了这个类的实例,它至少可以像超类一样容易访问。