@override如何在Java中运行?

时间:2016-06-27 07:42:45

标签: java inheritance overloading override

我需要有人看看我对这些代码行的想法。

class AAA
{ 
public void rideMethod(){System.out.println("AAA's Method");
public void loadMethod(){"void Method"};
}
class BBB extends AAA
{ 
public void rideMethod(){System.out.println("BBB's Method");
public void loadMethod(int num){"int Method"};
}
class CCC extends BBB
{ 
public void rideMethod(){System.out.println("CCC's Method");
public void loadMethod(double num){"double Method"};
}

class Ride
{
 public static void main(String[] args)
 {
  AAA ref1 = new CCC();   
  BBB ref2 = new CCC();   
  CCC ref3 = new CCC();

  ref1.rideMethod();
  ref2.rideMethod();
  ref3.rideMethod();


  ref3.loadMethod(); 
  ref3.loadMethod(1);
  ref3.loadMethod(1.2);
 }
}
//These are results. 
CCC's Method 
CCC's Method 
CCC's Method 
void Method
int Method
double Method

这是我的所作所为。

继承AAA()和BBB()的主范围中的ref#的CCC()是我们可以在这里引用包含类的每个方面的框的东西。 ref#的AAA,BBB和CCC(作为类类型)就像我们可以访问的边界。由于ref#已经使用CCC()初始化并且@override的概念被调整,因此必须发生Syso(“CCC的方法”)。 每个loadMethod都将拆分出“void int和double Method”,因为它们最初使用的类是AAA和BBB 谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

 AAA ref1 = new CCC(); 
 BBB ref2 = new CCC(); 
 CCC ref3 = new CCC(); 
  

有没有人可以解释它在编码器中的工作原理?

在这种情况下,ref1是对AAA对象的引用,由于CCC继承自AAA,因此它也是AAA,因此允许此分配由编译器和JVM。 ref2是对BBB的引用,由于new CCC()也是BBB的继承,因此允许此分配。

编辑:使用修改后的代码,您可以在调用loadMethod(int)loadMethod(double)时按预期打印

在前三个调用中,您使用的是重写方法,在后三个调用中,您使用的是重载方法。

在你编辑之前......

如果您更正了代码以便编译,那么

CCC's Method
CCC's Method
CCC's Method
void Method
void Method
void Method

在这里运行http://ideone.com/r7K2wI

我得到的是你要说的“Syso(”CCC的方法“)必须发生的结果。”但

  

每个loadMethod都将拆分“void int和double Method”,因为它们最初使用的类是AAA和BBB。   谢谢你的阅读!

不可以,loadMethod()无法拨打loadmethod(double),因为它不能,也不知道您将传递给哪个double