Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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中的实例变量继承_Java - Fatal编程技术网

java中的实例变量继承

java中的实例变量继承,java,Java,这里的输出是: 湿度为10摄氏度 0 为什么super.湿度返回10。我知道实例变量不是继承的,但它们可以在子类中访问。如果它们可以在子类中访问,那么这是否意味着它们在超级类和子类之间共享,或者超级类和子类都有不同的副本。现在来问为什么super.湿度返回10,但在下一个问题中行返回0。请澄清我的概念。天气和雨的每个实例都有自己的湿度副本 在change湿度()方法中,您同时引用了weathy和super.weathy。它们引用的是同一个实例变量。当您创建一个新的Rainy时,它继承了Weath

这里的输出是: 湿度为10摄氏度 0


为什么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。问题与继承无关。您可以创建两个不同的对象,一个
对象