1
    class Main
{
    public static void main(String[] arg)
    {
        C c = new C();

        c.show(); //how to access class A
    }

}

class A
{
    void show()
    {
    System.out.println("inside A");
    }
}

class B extends A
{
    void show()
    {
        System.out.println("inside B");
    }
}

class C extends B
{
    void show()
    {
        super.show(); //How to access class A
        System.out.println("inside C");
    }
}

使用super我可以访问Super Class 变量和方法,例如C可以访问B的方法,但是如果我想访问AC中的方法怎么办。我如何以简单的方式做到这一点,比如使用super?就像两个超级应该做的伎俩......我如何仅通过分配 C 类(如果存在名称隐藏)来访问 A 类方法?

4

2 回答 2

2

Java 中没有构造可以做类似的事情,c.super.super.show()因为它违反了封装。得墨忒耳定律是一个很好的原则,说明了为什么正确地避免了这种情况。考虑到这一点,您可以在 Java 中执行您的请求的方式是a.show()b这样公开:

class Main
{
    public static void main(String[] arg)
    {
        C c = new C();

        c.show(); //how to access class A
    }

}

class A
{
    void show()
    {
        System.out.println("inside A");
    }
}

class B extends A
{
    void show()
    {
        System.out.println("inside B");
    }

    void showA()
    {
        super.show();
    }
}

class C extends B
{
    void show()
    {
        super.showA(); // Calls A
        System.out.println("inside C");
    }
}
于 2018-04-18T03:40:54.227 回答
-1

在 C 中使用 A 的 show() 方法的一种方法是在 C 中创建类 A 对象并使用 A 的 show 函数。

class C extends B
{
    void show()
    {
        new A().show();
        super.show();
        System.out.println("inside C");
    }
}
于 2018-04-18T03:46:22.717 回答