Java 为什么变量没有';不完全声明等于0?
请原谅我的那个新手问题。这是我的奇怪,因为在java编码之前,我有C++背景,默认情况下变量等于<代码>未定义< /C> >或<代码> null < /> >;br> 所以我有一个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[
抽象类
:
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。如果它是本地的,那么必须明确地指定该值。