2013-08-29 87 views
1

我怀疑我想做什么是可能的。我有三个类A,B Y形C.乙延伸A和C延伸B.问超级超级

Ç - >乙 - > A.

在C类中,我想直接调用的类的方法。类似于

super.super.method(); 

我有这个机会吗?

原因:

A和B是系统类。我试图让B以不同的方式处理一些情况,除了一种方法之外,我已经完成了它。在其他方法中,我所做的是重写它们并传递修改的参数。

现在我有一种方法,我不能解决只是修改参数,所以我想完全覆盖它。

@Override 
public void draw(Canvas canvas) { 
    super.draw(canvas); // A method 
    ** other stuff ** 
} 

我想用C

@Override 
public void draw(Canvas canvas) { 
    super.super.draw(canvas); // A method 
    ** new stuff ** 
} 
+2

http:// stackoverflow。问题/ 11935895/java-how-to-call-super-super-in-overriden-method-grandparent-method 在发布之前,您可能会发现“google”的查询吗? –

+0

我在发帖之前找不到他们:(。谢谢你的链接。我应该删除答案吗?我是一个新手。 – Juangcg

回答

4

通过乔恩斯基特

你不能拿起最合适的答案从here - 因为它会破坏封装。

你可以调用你的超类的方法,因为它假定你知道什么打破了你自己类的封装,并且避免了......但你不知道你的超类执行什么规则 - 所以你可以不要绕过这里的实施。

2

你不能做什么。 super只允许您访问直接超类。

如果您认为需要这样做,您可能有设计问题。你能给我们更多关于你想做什么的细节吗?

-2

super可用于调用您的直接父类。

也许你可以设计一个class B函数,这样超级会叫class A。现在您可以使用class C来达到预期的效果。

+0

这应该是一个评论,而不是一个答案。 –

+0

我给了一个答案。以确认他的情况,所以在同一部分问:现在删除它。谢谢你的评论 –

0

我不认为这是可能的。可能你可以用这种方式来实现。

B类

method(){ 
super.method() 
} 

然后在C类,你可以调用super.method()。这样你最终会调用A的方法。

+0

这不等于不写在子类中的方法吗? – mariosangiorgio

+0

如果他不是在子类中编写方法,那么存在不需要此线程 –

+0

根据您的建议编写该方法与完全不编写该方法之间的区别是,JVM自行判断该方法是在超类中实现的? – mariosangiorgio

0
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(); 
    } 
}