Java 重载与继承
假设我有这些类:Java 重载与继承,java,oop,Java,Oop,假设我有这些类: class A {} class B extends A {} 也 我得到的输出是:AA 在我期待的时候:AB 我想知道为什么 我想知道为什么 因为引用类型是A 重载方法在编译时绑定。所以在编译时 只有编译器知道类A的方法将作为 参考变量b的类型为A 始终记住,要调用的重载方法是在 基于变量引用类型的编译时间 稍微解释一下 A b = new B(); 这一行表示引用变量b引用类b的对象,但它的类型是A,根据上面的规则,编译器在编译时只知道要调用的call方法应该属于类
class A {}
class B extends A {}
也
我得到的输出是:AA
在我期待的时候:AB
我想知道为什么
我想知道为什么
- 因为引用类型是
A
- 重载方法在编译时绑定。所以在编译时
只有编译器知道类A的方法将作为
参考变量
的类型为b
A
- 始终记住,要调用的重载方法是在 基于变量引用类型的编译时间
A b = new B();
这一行表示引用变量b
引用类b
的对象,但它的类型是A
,根据上面的规则,编译器在编译时只知道要调用的call
方法应该属于类A
编辑:如Subhrajyoti所建议。
正如Subhrajyoti正确地说的,这是编译时多态性
我想知道为什么
- 因为引用类型是
A
- 重载方法在编译时绑定。所以在编译时
只有编译器知道类A的方法将作为
参考变量
的类型为b
A
- 始终记住,要调用的重载方法是在 基于变量引用类型的编译时间
A b = new B();
这一行表示引用变量b
引用类b
的对象,但它的类型是A
,根据上面的规则,编译器在编译时只知道要调用的call
方法应该属于类A
编辑:如Subhrajyoti所建议。
正如Subhrajyoti所说,这是编译时多态性重载调用绑定是在编译类型上使用静态类型完成的
Java使用静态类型或引用类型在编译时决定重载调用,而不使用运行时类型
因此,由于b
的静态类型是A
,因此调用接受参数A
的方法
call(b)//现在编译器看到引用类型是A
因此,使用call(A)
和notcall(B)
重载调用绑定是在编译类型下使用静态类型完成的
Java使用静态类型或引用类型在编译时决定重载调用,而不使用运行时类型
因此,由于b
的静态类型是A
,因此调用接受参数A
的方法
call(b)//现在编译器看到引用类型是A
因此,将此调用与
调用(A)
和非调用(B)
绑定变量B
的类型为A
。静态方法是在声明的变量类上调用的,而不是在它的实际运行时内容上调用的,因此call(b)
被绑定为call(ab)
变量b
的类型是a
。静态方法是在声明的变量类上调用的,而不是在它的实际运行时内容上调用的,因此call(b)
被绑定为call(ab)
对于没有多态性的静态方法。静态方法绑定到类。如果引用了A
,则可以从A
中为没有多态性的静态方法校准静态方法。静态方法绑定到类。如果您有对A
的引用,那么您可以从A
中调用静态方法,您期望的是方法重写。在这种情况下,这两个调用方法应该是不同类的一部分,一个在父类中,一个在子类中,在这种情况下,两个方法签名应该完全相同/匹配
另外,由于您的方法是静态的,所以您应该记住静态方法不会被重写。不过,您可以在子类中使用相同的签名和名称编写静态方法,但这将被称为方法隐藏
当您调用重写的方法时,根据引用变量引用的对象类型,在运行时将方法调用绑定到其定义。您期望的是方法重写。在这种情况下,这两个调用方法应该是不同类的一部分,一个在父级,一个在子级,在这种情况下,两个方法签名应该完全相同/匹配 另外,由于您的方法是静态的,所以您应该记住静态方法不会被重写。不过,您可以在子类中使用相同的签名和名称编写静态方法,但这将被称为方法隐藏
当您调用重写的方法时,根据引用变量引用的对象类型,在运行时将方法调用绑定到其定义。按照惯例,不建议在此类方法中使用静态字段以提高可读性。正如你看到的,你有些困惑
使用像这样的所有静态字段“A.call(some variable)”而不是“new A().call(some variable)”。按照惯例,不建议在此类手册中使用静态字段以提高可读性。正如你看到的,你有些困惑
使用像“A.call(some variable)”这样的所有静态字段,而不是“new A().call(some variable)”。@sureshatta,谢谢您的编辑。现在是编译时polymorphism@JunedAhsan您的评论可能与我的重复..:D@MarounMaroun我在某个地方读到“伟人所见略同”:-p;-)@SubhrajyotiMajumder感谢您提供准确的术语,编辑了答案:)@sureshatta,感谢您的编辑。现在是编译时polymorphism@JunedAhsan您的评论可能与我的重复..:D@MarounMaroun我在什么地方读过书