首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

Java 类型转换的疑问解决办法

2012-03-05 
Java 类型转换的疑问public class B {public int i1public B f() {Log.d(B,B:f() + i) return thi

Java 类型转换的疑问
public class B {
  public int i=1;
  public B f() {Log.d("B","B:f() " + i); return this;}
  }
   
  public class D extends B {
  public D f() {Log.d("D","D:f() " + (++i)); return this;}
  }


  D d = new D();
   
  ((B)d.f()).f();

上述代码运行结果:
10-13 16:45:43.627: DEBUG/D(1466): D:f() 2
10-13 16:45:43.637: DEBUG/D(1466): D:f() 3

为什么第二行log还是调用的D对象呢?都已经强制类型转换了。


[解决办法]
D是B的子类,你不管转不装换类型,d执行f()一定是执行子类的f()方法,这个是JAVA编译器运行时候的“自动向下绑定机制”
如果你在子类里面想要调用父类的同名方法,必须要用super.f()才可以,弄类型转换根本不解决问题

我看你只是想实验一下,给你贴个简单的例子吧

Java code
class B {    public int i=1;    public void f() {//        Log.d("B","B:f() " + i);//        return this;        System.out.println("class B invoke f method");    }}public class D extends B {    public void f() {//        Log.d("D","D:f() " + (++i));//        return this;//        super.f();        System.out.println("class D invoke f method");        super.f();    }    public static void main(String[] args) {        new D().f();    }} 

热点排行