Java-Difference((classType)this).m1()和一个静态引用
在Java中,一个对象可以像这样调用父方法:Java-Difference((classType)this).m1()和一个静态引用,java,inheritance,binding,Java,Inheritance,Binding,在Java中,一个对象可以像这样调用父方法:((父)this).m1() 与此有什么区别:fatherf=sonObj;f、 m1() public Father extends Object { public void m1(){} } public Son extends Father { public void m1() { ((Father) this).m1(); } } Java-Difference((classType)this).m1()和一个静态引用 一个
((父)this).m1()代码>
与此有什么区别:fatherf=sonObj;f、 m1()代码>
public Father extends Object {
public void m1(){}
}
public Son extends Father {
public void m1() {
((Father) this).m1();
}
}
Java-Difference((classType)this).m1()和一个静态引用
一个细节,但它不是一个静态引用,而是一个引用
在Java中,一个对象可以像这样调用父方法:
这有什么区别:
在这两种情况下,您都调用由this
和sonObj
引用的实例的m1()
方法。
在您的示例中,这些是Son
实例。
因此,将调用Son
m1()
方法的方法
要调用父类的m1()
方法,应执行以下操作:
public Son extends Father {
public void m1() {
super.m1();
}
}
我建议,您首先尝试运行代码。不要忘记在两个m1()
中都放一个print语句。不需要显式扩展Object
类,因为java中的所有类都隐式扩展Object
类。调用((父)变量)。m1()
将始终导致son的m1()
得到执行,因为在java中所有方法都是虚拟的。您试图在son的m1()中执行此操作,甚至会导致son.m1()
的无限递归,您确定吗?在我的书中,他们是这样做的。他们写道,这和super.m1()一样;在Java中,所有方法都是虚拟的,因此您总是在继承层次结构的顶部调用该方法。当您重写一个方法时,您可以通过调用super来选择使用super类功能,但是除非您在该方法内做额外的工作,否则没有理由调用super,因为如果您没有重写该方法的话。另外,您的类层次结构是错误的,每个父亲都是儿子,因此父亲
应该扩展儿子
而不是反过来。((父亲)这一点)。m1()和super.m1是一样的,谢谢。但是,如果我想调用父方法,为什么第一种方法有效呢?我认为它仍然是一个子对象。((父)this.m1()
和super.m1()
不是一回事((父)this).m1()
调用this
引用的实例的m1()
方法。如果this
引用了一个Son
实例,则将调用Son
的m1()
super.m1()
是一种可供子类调用父方法的能力。
((Father)this).m1();
Father f = sonObj; f.m1();
public Son extends Father {
public void m1() {
super.m1();
}
}