为什么没有完全声明的变量等于0?

时间:2014-06-09 05:38:03

标签: java inheritance abstract-class

对不起我的新手问题。这对我来说很奇怪,因为在java编码之前,我有一个C ++背景,其中默认情况下变量等于undefinednull;
所以我有abstract class

public abstract class Animal {
    int lifeBar;
    public void eat(int x) {
        lifeBar += x;
    }
}

我有 Bird class扩展了它:

public class Bird extends Animal {

}

Main class

public class Main {
    public static void main(String[] args) {
        Animal bird = new Bird();
        bird.eat(10);
        System.out.println("bird: " + bird.lifeBar);
    }
}

我认为应该有编译错误,因为我没有声明lifeBar变量,但控制台显示我 10 。这是为什么?是因为有一些默认的构造函数吗?

2 个答案:

答案 0 :(得分:2)

  • 继承意味着子类可以扩展超类的状态
  • 因此在您的示例中,当Bird extends Animal所有方法和时 变量在Bird类中继承。
  • lifeBarint类型的实例变量,因此其默认值为0
  • 你正在调用lifeBar += x;语句将值增加10的方法,因为你将10作为参数传递给方法。

答案 1 :(得分:1)

lifeBarAnimal的成员,未明确初始化,因此会为0

设置int的默认值

查看