为什么 @override 在 Java 中有效?
How come @override works in Java?
我需要有人看看我对这些代码行的看法。
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
这是我拍的。
主要作用域中 ref# 的 CCC() 继承了 AAA() 和 BBB(),我们可以在这里引用包含 classes 各个方面的框。 ref# 的 AAA、BBB 和 CCC(作为 class 类型)就像我们可以访问的边界。由于 ref# 已使用 CCC() 初始化,并且调整了 @override 的概念,因此必须出现 Syso("CCC's Method")。
每个 loadMethod 都会拆分出 "void int and double Method" 因为他们最初使用的 classes 是 AAA 和 BBB.
感谢阅读!
AAA ref1 = new CCC();
BBB ref2 = new CCC();
CCC ref3 = new CCC();
Is there anyone who can explain how it works inside the complier?
在这种情况下 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 的方法") 必须作为结果发生。"但是
Each loadMethod will split out "void int and double Method" because the classes they initially used are AAA and BBB.
thanks for reading!
不,调用 loadMethod()
不可能调用 loadmethod(double)
,因为它不能也不知道您会传递给它哪个 double
。
我需要有人看看我对这些代码行的看法。
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
这是我拍的。
主要作用域中 ref# 的 CCC() 继承了 AAA() 和 BBB(),我们可以在这里引用包含 classes 各个方面的框。 ref# 的 AAA、BBB 和 CCC(作为 class 类型)就像我们可以访问的边界。由于 ref# 已使用 CCC() 初始化,并且调整了 @override 的概念,因此必须出现 Syso("CCC's Method")。
每个 loadMethod 都会拆分出 "void int and double Method" 因为他们最初使用的 classes 是 AAA 和 BBB.
感谢阅读!
AAA ref1 = new CCC();
BBB ref2 = new CCC();
CCC ref3 = new CCC();
Is there anyone who can explain how it works inside the complier?
在这种情况下 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 的方法") 必须作为结果发生。"但是
Each loadMethod will split out "void int and double Method" because the classes they initially used are AAA and BBB. thanks for reading!
不,调用 loadMethod()
不可能调用 loadmethod(double)
,因为它不能也不知道您会传递给它哪个 double
。