我需要有人看看我对这些代码行的想法。
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 谢谢你的阅读!
答案 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
我得到的是你要说的“Syso(”CCC的方法“)必须发生的结果。”但
每个loadMethod都将拆分“void int和double Method”,因为它们最初使用的类是AAA和BBB。 谢谢你的阅读!
不可以,loadMethod()
无法拨打loadmethod(double)
,因为它不能,也不知道您将传递给哪个double
。