如何在main方法中访问超类变量和方法?

时间:2018-04-18 03:35:28

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

使用超级我可以访问超级变量, C 等方法可以访问 B '方法,但如果我想在 C 中访问 A 的方法该怎么办?我如何以简单的方式使用超级?像两个超级应该做的伎俩...... 如何仅通过分配C类(如果存在名称隐藏)来访问A类方法?

2 个答案:

答案 0 :(得分:2)

Java中没有构造像c.super.super.show()这样的东西,因为它违反了封装。 The Law of Demeter是一个很好的原则,说明为什么这是正确的避免。考虑到这一点,您在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");
    }
}

答案 1 :(得分:-1)

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

library(tidyverse)

tibble(
  one = c("c", "d", "e", "c", "d", "e"),
  two = c("a", "a", "a", "b", "b", "b"),
  three = 1:6
) -> test_df

test_df %>%
  group_by(two) %>%
  mutate(new = three - three[1])
## # A tibble: 6 x 4
## # Groups:   two [2]
##   one   two   three   new
##   <chr> <chr> <int> <int>
## 1 c     a         1     0
## 2 d     a         2     1
## 3 e     a         3     2
## 4 c     b         4     0
## 5 d     b         5     1
## 6 e     b         6     2