samungtered 2009-09-11 19:51
浏览 476
已采纳

java子类继承父类问题

java子类继承父类问题
求解释! 虽然做了几年的开发
但确实不明白为什么?
[code="java"]
class Foo {
public int a;
public Foo() { a = 3; }
public void addFive() { a += 5; }
}

public class Bar extends Foo{
public int a;
public Bar() { a = 8; }
public void addFive() { this.a +=5; }

public static void main(String[] args) {
    Foo foo = new Bar();
     foo.addFive();
     System.out.println("Value: "+ foo.a);
}

}

[/code]

结果为什么输出的是3
可以试下~
求解释

[b]问题补充:[/b]
看到楼下的很多朋友的回答
我之前也是这么认为的
与java得多态有关 方法可以多态重载,但属性不能

假设这样设想 我想得到结果是
在父类的属性a的值的基础上 让其用子类的加法进行呢?

如何实现呢?
[code="java"]
public int addFive() {
super.a += 5;
}
[/code]
就可以了

  • 写回答

22条回答 默认 最新

  • walsh_bupt 2009-09-14 09:25
    关注

    [code="java"]class Foo {
    public int a;

    public Foo() {
        a = 3;
    }
    
    public int addFive() {
        a += 5;
        return a;
    }
    
    public int getA() {
        return a;
    }
    

    }

    public class Bar extends Foo {
    public int a;

    public Bar() {
        a = 8;
    }
    
    public int addFive() {
        this.a += 5;
        return a;
    }
    
    public int getA() {
        return a;
    }
    
    public static void main(String[] args) {
        Foo foo = new Bar();
        //调用的是子类中的方法
        System.out.println(foo.getA());
        //直接调用父类中的a
        System.out.println("Value: " + foo.a);
        //调用的是子类中的方法
        System.out.println(foo.addFive());
    
    }
    

    }[/code]输出结果:
    8
    Value: 3
    13

    楼主,只需要明白一点就行了:在Java中重写指的是方法的重写,而不是属性的重写,还有多态也只是方法的多态 ,没有属性的多态。

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

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配