java - 如何在主方法中访问父类(super class)变量和方法?

标签 java class object methods name-hiding

    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 类变量和方法,例如C可以访问B的方法,但是如果我想访问CA的方法怎么办?我如何以简单的方式(例如使用super)做到这一点?像两个 super 应该可以做到这一点...... 如何仅通过分配 C 类(如果存在名称隐藏)来访问 A 类方法?

最佳答案

Java 中没有构造可以执行诸如 c.super.super.show() 之类的操作,因为它违反了封装性。 The Law of Demeter这是一个很好的原则,说明了为什么要正确避免这种情况。考虑到这一点,您在 Java 中执行请求的方法是在 b 中公开 a.show(),如下所示:

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");
    }
}

关于java - 如何在主方法中访问父类(super class)变量和方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49890753/

相关文章:

java - 如何快速显示规则网格?

javascript - 方法名称(arg) {} ≠ 方法名称 = arg =>{}

python - 在没有mixin的情况下迭代类对象的字典 - python

c++ - 无法将 'this' 的引用传递给另一个类的构造函数

c# - 在 C# 中,有没有办法将同一类中的代码分离到不同的文件中?

JavaFX 将 TextField 的 TextFormatter 中的 valueProperty 绑定(bind)到 SimpleDoubleProperty

java - 除非满足条件,否则阻止从按钮组中的特定切换按钮进行切换

java - java中的HashMap初始化

ruby - 在 case 语句中使用类对象

python - 重命名对象内部repr,name//tkinter问题