roz*_*roz 53 java methods inheritance superclass
让我们假设我有以下两个类
public class alpha {
public alpha(){
//some logic
}
public void alphaMethod1(){
//some logic
}
}
public class beta extends alpha {
public beta(){
//some logic
}
public void alphaMethod1(){
//some logic
}
}
public class Test extends beta
{
public static void main(String[] args)
{
beta obj = new beta();
obj.alphaMethod1();// Here I want to call the method from class alpha.
}
}
Run Code Online (Sandbox Code Playgroud)
如果我发起一个beta类型的新对象,我怎样才能执行alphamethod1类alpha而不是beta中的逻辑?我可以使用super().alphaMethod1()< - 我想知道这是否可行.
Eclipse IDE中的Autotype允许我alphamethod1从类alpha或类中选择beta.
Mic*_*jer 82
你可以做:
super.alphaMethod1();
Run Code Online (Sandbox Code Playgroud)
注意,这super是对父级的引用,但是super()是它的构造函数.
CKR*_*666 12
你不能通过使用beta的对象来调用alpha的alphaMethod1()但你有两个解决方案:
解决方案1:alphaMethod1()从beta中调用alphaalphaMethod1()
class Beta extends Alpha
{
public void alphaMethod1()
{
super.alphaMethod1();
}
}
Run Code Online (Sandbox Code Playgroud)
或者来自Beta的任何其他方法:
class Beta extends Alpha
{
public void foo()
{
super.alphaMethod1();
}
}
class Test extends Beta
{
public static void main(String[] args)
{
Beta beta = new Beta();
beta.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:创建alpha对象并调用alphaalphaMethod1()
class Test extends Beta
{
public static void main(String[] args)
{
Alpha alpha = new Alpha();
alpha.alphaMethod1();
}
}
Run Code Online (Sandbox Code Playgroud)
可以使用 super 从母类调用该方法,但这意味着您可能有设计问题。也许B.alphaMethod1()不应该覆盖 A 的方法并被调用B.betaMethod1()。
如果视情况而定,您可以放置一些代码逻辑,例如:
public void alphaMethod1(){
if (something) {
super.alphaMethod1();
return;
}
// Rest of the code for other situations
}
Run Code Online (Sandbox Code Playgroud)
这样它只会在需要时调用 A 的方法,并且对类用户保持不可见。