men4661273 2012-08-17 16:41
浏览 169
已采纳

子类继承父类发现的疑问

父类
[code="java"]
package test;

public class Car {

public void car(Other o){
    System.out.println(this);   

    o.process(this);
}

}

[/code]
子类
[code="java"]
package test;

public class Audi extends Car{

}
[/code]

这个类里面有两个重载的方法,参数分别为父类和子类

[code="java"]package test;

public class Other {

 public void process(Audi a){
     System.out.println("Audi");
 }

public void process(Car c){
System.out.println("Car");
}
}[/code]

测试类:
[code="java"]
package test;

public class Test {

public static void main(String[] args) {
    Other o = new Other();

    Car c = new Car();
    c.car(o);

    Audi a = new Audi();
    a.car(o);
}

}

[/code]

this代表的是调用该方法的当前对象,当我用Audi的对象调用car方法时,this指代的是Audi对象,执行o.process(this);方法是应该是执行的Other
类里面的

public void process(Audi a){
System.out.println("Audi");
}
才对,为什么两次打印的都是Car呢,我很疑惑

  • 写回答

5条回答 默认 最新

  • iteye_7115 2012-08-17 17:08
    关注

    如何你把Audi改成如下就可以达到你的要求:
    [code="java"]public class Audi extends Car {
    @Override
    public void car(Other o) {
    System.out.println(this);
    o.process(this);
    }
    }[/code]

    而之所以你现在的代码输出Car,是因为子类中的car方法,默认是这样的:
    [code="java"] @Override
    public void car(Other o) {
    // TODO Auto-generated method stub
    super.car(o);
    }[/code]
    也就是说调用的还是父类的对象,也就car方法里的this指代的是父类

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?