class A{
private void fun(){
System.out.println("A");
}
public void f(){
this.fun();
}
}
class B extends A{
public void fun(){
System.out.println("B");
}
}public class TestOverride { public static void main(String[] args) {
B b = new B();
b.f();
}}
private void fun(){
System.out.println("A");
}
public void f(){
this.fun();
}
}
class B extends A{
public void fun(){
System.out.println("B");
}
}public class TestOverride { public static void main(String[] args) {
B b = new B();
b.f();
}}
解决方案 »
- java.sql.SQLException:No suitable driver 求救
- JAVA中已经存在的类,如何重载(自己的)或重写(继承)已有的方法?
- 菜鸟提问
- 关于输入输出的问题
- 怎么通过javabean获得jsp下拉列表的值?
- Call to 'super' must be the first statement in the constructor body..这句话是什么意思....
- 如何文件拖动的效果,例如拖动一个文本文件到文本框中,然后显示其内容
- jar文件怎么运行啊!
- 问题
- 有没有办法可以实现A类的子类都实现E接口或者E接口的子类
- javascript 正则表达式表示中文问题
- 我又出错了,求大虾指导!!!!!!!!!!!
而 “void f()”中的语句“this.fun()”则执行了A的方法“void fun()”
那么此时的子类B中所具有的方法有:A.f(),B.fun()这两个。
而当你实例化B后调用f()函数,而f()里又调用了fun();
但此时编译器知道fun()是private的,
那么他直接静态绑定了父类中的fun()方法。
此时并不存在多态问题
如果你把ptivate去掉就会是b了 这种私有的 子类根本不知道里面有这个方法。如果建立b的对象在你调用方法时 他会先看看子类里有没有这个方法,如果没有就会默认的调用父类的方法,,问题就出在了private上面。你试一下就知道了 。。或多做两个这样的题就明白了。。
而且在f()中没有B类中的输出,所以只会输出A
你所说的 父类中的this 是指 子类的引用(可以打印试试,属于动态绑定,在运行是查找执行),此处是private,所以属于静态绑定,
我感觉你只考虑到了多态,但没有考虑到静态绑定。所以疑惑,,个人的见解,供你参考!!!!