Asking super of super
我对我想做的事情是否可能有疑问。我有三个类A,B,Y,C。B扩展A和C扩展B。
C->B->A。
在C类中,我想直接调用类的方法。有点像
我有机会吗?
原因:
A和B是系统类。我试图让B以不同的方式处理某些情况,我已经完成了它,除了一种方法。在其他方法中,我所做的是重写它们并传递修改后的参数。
现在我有了一个方法,我不能仅仅解决修改参数的问题,所以我想完全重写它。
乙
1 2 3 4 5
| @Override
public void draw (Canvas canvas ) {
super. draw(canvas ); // A method
** other stuff **
} |
号
我想用C语言做什么
1 2 3 4 5
| @Override
public void draw (Canvas canvas ) {
super. super. draw(canvas ); // A method
** new stuff **
} |
- stackoverflow.com/questions/11935895/…在这里发布之前,您的查询可能是"google"?
- 我在发帖前没找到:(。谢谢你的链接。我应该删除答案吗?我是个新手。
乔恩·斯基特从这里找到了最合适的答案
你不能-因为它会破坏封装。
您可以调用超类的方法,因为它假定您知道什么会破坏您自己类中的封装,并避免这样做…但是你不知道你的超类正在执行什么规则——所以你不能只是绕过那里的一个实现。
你不能。super只允许您访问直接超类。
如果你认为需要这样做,你可能有一个设计问题。你能告诉我们更多你想做什么的细节吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class A
{
void access ()
{
//this method is to be accessed
System. out. println("I can be accessed");
}
}
class B extends A
{
//code here
}
class C extends B
{
public static void main (String[] args )
{
C ob = new C ();
ob. call();
}
void call ()
{
super. access();
}
} |
号
我认为那是不可能的。也许你可以用这种方法来实现。
B类
1 2 3
| method(){
super.method()
} |
然后在类C中,可以调用super.method()。这样,您最终将调用A的方法。
- 这不等于根本不在子类中编写方法吗?
- 如果他不在子类中编写方法,那么就不需要这个线程。
- 按照您的建议编写方法和完全不编写方法之间的区别是什么?让JVM自己发现该方法是在超类中实现的?
super可用于调用直接父类。
也许您可以设计一个class B函数,这样super就可以调用class A。现在您可以使用class C来获得所需的结果。
- 这应该是一个评论而不是回答。
- 我回答了。我只是想确认一下他的情况。在同一节中也有这样的问题。立即移除。谢谢你的评论