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条)

报告相同问题?