当你扩展私人课程。公共和受保护的成员是否成为私人

时间:2015-04-02 09:34:01

标签: java

扩展私有类时。公共和受保护的班级成员是否变得私密。如果没有任何解释。

5 个答案:

答案 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外部看不到课程InnerP2C。 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文件,但是一旦你有了这个类的实例,它至少可以像超类一样容易访问。