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类方法?
答案 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