Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么变量没有';不完全声明等于0?_Java_Inheritance_Abstract Class - Fatal编程技术网

Java 为什么变量没有';不完全声明等于0?

Java 为什么变量没有';不完全声明等于0?,java,inheritance,abstract-class,Java,Inheritance,Abstract Class,请原谅我的那个新手问题。这是我的奇怪,因为在java编码之前,我有C++背景,默认情况下变量等于未定义< /C> >或 null < /> >;br> 所以我有一个抽象类: public abstract class Animal { int lifeBar; public void eat(int x) { lifeBar += x; } } public class Main { public static void main(String[

请原谅我的那个新手问题。这是我的奇怪,因为在java编码之前,我有C++背景,默认情况下变量等于<代码>未定义< /C> >或<代码> null < /> >;br> 所以我有一个
抽象类

public abstract class Animal {
    int lifeBar;
    public void eat(int x) {
        lifeBar += x;
    }
}
public class Main {
    public static void main(String[] args) {
        Animal bird = new Bird();
        bird.eat(10);
        System.out.println("bird: " + bird.lifeBar);
    }
}
我有一个Bird
,它扩展了它:

public class Bird extends Animal {

}
和主

public abstract class Animal {
    int lifeBar;
    public void eat(int x) {
        lifeBar += x;
    }
}
public class Main {
    public static void main(String[] args) {
        Animal bird = new Bird();
        bird.eat(10);
        System.out.println("bird: " + bird.lifeBar);
    }
}
我认为应该有编译错误,因为我没有声明
lifeBar
变量,但控制台显示了10。为什么呢?是因为有一些默认构造函数吗

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

救生艇
动物
的成员,该动物未明确初始化,因此它为
int
设置其默认值,即
0


它就在您的问题标签中。继承。它的可能重复项已清除。但是为什么它等于0呢?是否未定义?@Beezy实例变量未在构造函数/初始化块中显式设置,对于原语,其默认值为0/0.0/
'\u0000'
,对于引用,其默认值为
null
types@Beezyjava规范说,当int变量是实例或静态变量时,它的默认值应该是0。如果它是本地的,那么必须明确地指定该值。