java中的实例变量继承
这里的输出是: 湿度为10摄氏度 0java中的实例变量继承,java,Java,这里的输出是: 湿度为10摄氏度 0 为什么super.湿度返回10。我知道实例变量不是继承的,但它们可以在子类中访问。如果它们可以在子类中访问,那么这是否意味着它们在超级类和子类之间共享,或者超级类和子类都有不同的副本。现在来问为什么super.湿度返回10,但在下一个问题中行返回0。请澄清我的概念。天气和雨的每个实例都有自己的湿度副本 在change湿度()方法中,您同时引用了weathy和super.weathy。它们引用的是同一个实例变量。当您创建一个新的Rainy时,它继承了Weath
为什么super.湿度返回10。我知道实例变量不是继承的,但它们可以在子类中访问。如果它们可以在子类中访问,那么这是否意味着它们在超级类和子类之间共享,或者超级类和子类都有不同的副本。现在来问为什么super.湿度返回10,但在下一个问题中行返回0。请澄清我的概念。天气和雨的每个实例都有自己的湿度副本
在
change湿度()
方法中,您同时引用了weathy
和super.weathy
。它们引用的是同一个实例变量。当您创建一个新的Rainy
时,它继承了Weather
的所有内容,这就是为什么您可以首先使用湿度
但是,当您创建一个新的天气
时,这与您的雨天
实例完全无关。假设这里有两个对象:
class Weather{
int humidity;
//default value is 0;
}
class Rainy extends Weather{
void changeHumidity(){
humidity = 10;
System.out.println("The humidity is " + super.humidity);
}
}
public class Test{
public static void main(String[] args){
new Rainy().changeHumidity();
System.out.println(new Weather().humidity);
}
}
上述每个对象都有自己的湿度副本
。更改实例上的湿度rainy
不会更改实例上的湿度weather
Rainy rainy = new Rainy();
Weather weather = new Weather();
天气
和雨天
的每个实例都有自己的湿度
副本
在
change湿度()
方法中,您同时引用了weathy
和super.weathy
。它们引用的是同一个实例变量。当您创建一个新的Rainy
时,它继承了Weather
的所有内容,这就是为什么您可以首先使用湿度
但是,当您创建一个新的天气
时,这与您的雨天
实例完全无关。假设这里有两个对象:
class Weather{
int humidity;
//default value is 0;
}
class Rainy extends Weather{
void changeHumidity(){
humidity = 10;
System.out.println("The humidity is " + super.humidity);
}
}
public class Test{
public static void main(String[] args){
new Rainy().changeHumidity();
System.out.println(new Weather().humidity);
}
}
上述每个对象都有自己的湿度副本
。更改实例上的湿度rainy
不会更改实例上的湿度weather
Rainy rainy = new Rainy();
Weather weather = new Weather();
湿度
是一个实例变量。
实例变量:
这些变量属于类的实例,因此是对象。及
该类(对象)的每个实例都有它自己的副本
变量对变量所做的更改不会反映在其他变量中
该类的实例
newweather()
将创建一个新实例
rainy.humidity = 20;
System.out.println(weather.humidity); //-> 0
t1.x=10
不会对t2.x
进行任何更改t2.x
仍然是5湿度
是一个实例变量。
实例变量:
这些变量属于类的实例,因此是对象。及
该类(对象)的每个实例都有它自己的副本
变量对变量所做的更改不会反映在其他变量中
该类的实例
newweather()
将创建一个新实例
rainy.humidity = 20;
System.out.println(weather.humidity); //-> 0
t1.x=10
不会对t2.x
进行任何更改t2.x
在雨季仍然是5字段不存在湿度,因此该类使用父类字段初始化
如果您在子类更改中取消湿度字段,但在雨天类中打印父类字段,则该类不存在湿度字段,因此该类使用父类字段进行初始化
如果您在子类更改中清除湿度字段,但打印父类字段在雨天类i中将湿度更改为10,那么为什么super.wittery将10作为super.wittery的输出指向值为0的Weather类湿度变量,也就是为什么在子类i中更改湿度时super.wittery更改为10创建了Rain类对象,然后它将访问湿度和超级湿度。这意味着湿度和超级湿度指的是相同的值,其中一个值的变化也将反映在另一个值中
湿度和超级。湿度在Rain
中是完全相同的变量。它们是内存中的单个位置,以不同的方式引用。事实上,当你说湿度
时,编译器将其视为超级湿度
。这只是语法。在Rain类中,我将湿度更改为10,那么为什么super.湿度将10作为super.湿度的输出指向Weather类湿度变量,该变量的值为0 bu deafultalso为什么super.湿度在子类中更改湿度如果我创建了Rain类对象,那么它将访问湿度和湿度超级湿度也就是说,湿度和超级湿度指的是相同的值,其中一个值的变化也会反映在另一个值上湿度和超级。湿度在雨中是完全相同的变量。它们是内存中的单个位置,以不同的方式引用。事实上,当你说湿度
时,编译器将其视为超级湿度
。这只是语法。这是否意味着实例变量在两个类之间共享,还是意味着两个类都有不同的humidity副本该类的不同实例中实例变量的不同副本。该示例应使其清晰,这意味着实例变量在两个类之间共享,还是意味着两个类都具有不同的humidity副本该类的不同实例中实例变量的不同副本。这个例子应该说明问题与继承无关。您创建了两个不同的对象,一个是立即丢弃的Rainy
,另一个是用于打印Weather
并立即丢弃的Weather。问题与继承无关。您可以创建两个不同的对象,一个对象