java中,内部类可以改变外部类实例域的值吗?

在Java编程中,内部类可以改变外部类的实例变量值。下面通过一个例子来说明这一特性。首先定义一个外部类InnerDemo,其中包含一个实例变量val,一个静态变量staticVal,以及两个final修饰的变量FINALVAL和FSVAL。然后在主方法main中创建一个InnerDemo实例,并通过这个实例创建一个内部类InnerClass的实例。在...
java中,内部类可以改变外部类实例域的值吗?
在Java编程中,内部类可以改变外部类的实例变量值。下面通过一个例子来说明这一特性。

首先定义一个外部类InnerDemo,其中包含一个实例变量val,一个静态变量staticVal,以及两个final修饰的变量FINALVAL和FSVAL。然后在主方法main中创建一个InnerDemo实例,并通过这个实例创建一个内部类InnerClass的实例。

在InnerClass类中,有一个change方法。在该方法中,尝试改变外部类的实例变量和静态变量的值。例如,可以将静态变量staticVal的值改为23,这是合法的,因为静态变量不是final修饰的。

然而,尝试改变final修饰的实例变量FINALVAL和静态变量FSVAL的值会报编译错误。这是因为final修饰的变量在初始化之后,不能被重新赋值。

在change方法中,还尝试重新创建了一个InnerDemo实例,并试图改变外部实例的实例变量val的值。这同样是可以的,因为内部类可以访问外部类的实例变量。

最后,在main方法中,输出了几个变量的值,可以看到静态变量staticVal的值已经被改变,而实例变量val的值仍然保持不变。这说明内部类可以改变外部类的实例变量值,但不能改变final修饰的变量值。2024-12-03
mengvlog 阅读 25 次 更新于 2025-08-09 05:03:30 我来答关注问题0
  •  翡希信息咨询 什么是内部类?内部类的作用

    内部类在Java等编程语言中扮演着重要的角色,它提供了多种形式的类定义方式,使得代码更加灵活和易于维护。成员内部类可以无条件访问外部类成员,局部内部类限定了访问范围,匿名内部类简化了代码实现,静态内部类则提供了独立实例化和访问静态成员的能力。这些特性使得内部类在面向对象编程中具有广泛的应用价值...

  •  阿暄生活 为什么静态内部类是线程安全的

    例如,在Java中,可以使用静态内部类来创建单例模式,保证全局只有一个实例,从而实现线程安全。总结:静态内部类本身是线程安全的,因为它不依赖于外部类的实例、不会改变外部类的状态、也不会持有外部类的实例。然而,在使用静态内部类时,仍需确保使用它的代码也是线程安全的,以避免潜在的并发问题。

  •  育知同创教育 深入理解Java中为什么内部类可以访问外部类的成员

    这句话的意思是, 在内部类Outer$Inner中, 存在一个名字为this$0 , 类型为Outer的成员变量, 并且这个变量是final的。 其实这个就是所谓的“在内部类对象中存在的指向外部类对象的引用”。但是我们在定义这个内部类的时候, 并没有声明它, 所以这个成员变量是编译器加上的。 虽然编译器在创建内部类时为它加上了...

  •  深空见闻 什么内部类

    内部类(Nested Class)是嵌套在一个类内部的类。在Java编程语言中,内部类主要有以下几种类型:成员内部类(Member Class):定义:成员内部类是类的一个成员,定义在类的成员位置。特点:可以访问外部类的所有成员,包括私有成员。用途:用于将类与类之间的逻辑关系封装在一起,提高代码的模块化。静态...

  •  chengwei1104 Java中内部类可以访问外部类的成员,请问这样算不算是破坏了封装性?

    所以内部类具有成员的一切共性,也具有类的一切共性,同时也具有自己的一些特性。类的成员之间可以互相访问,所以这个内部类也可以访问外部类的成员。封装的目的就是为了代码的复用、增强安全性、实现模块化等,其实内部类嵌入到里面也是为了这个目的。不能说是破坏了这个封装原则吧。内部类也有说内嵌类的,...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部