当前位置: 首页 > 知识库问答 >
问题:

在Java[副本]中访问子类中的超类的“最终”字段(并更新它们)

苏承载
2023-03-14

我有一个字段,用于从Buildings类继承的建筑物和不同类型建筑物的子类。Buildings类有一个名为“TotalNumber”的字段,每次在子类中添加建筑物时,我都要更新该字段。

我希望Buildings类中的TotalNumber始终显示已创建的建筑物的总数。

在这种情况下,我要为“totalnumber”字段使用“final”关键字吗?

如果在子类“cottag”的对象(即cott)中调用

Cott.TotalNumber=Cott.TotalNumber+=1

它会更新它继承的字段吗?

请帮帮忙。谢谢.

共有1个答案

秦楚
2023-03-14

final意味着您可以在初始化变量时赋值一次,然后它是只读的。在最简单的情况下,您需要的是某种静态变量,该变量计算已创建的建筑物实例。但这可以通过以下方式轻松实现:

public class Buildings{
     //a simple counter for created instances
     private static int createdInstances = 0;

     public Buildings(){
          //new instance created -> increment counter
          createdInstances++;
     }
}

如果您创建了一个子类的实例,那么总是同时调用超类的构造函数,所以您不需要在子类中做任何事情。

 类似资料:
  • 问题内容: 我有一个名为 Geometry 的基类,在该基类中存在 Sphere 子类: 和一个子类: 我有一个包含所有 Geometry 对象的ArrayList,我想对其进行迭代以检查是否正确读取了文本文件中的数据。到目前为止,这是我的迭代器方法: 如何访问和打印 球体的 半径和中心字段?提前致谢 :) 问题答案: 如果要访问子类的属性,则必须转换为子类。 但是,这并不是最OO的处理方式:一旦

  • 问题内容: 众所周知,私有字段不会在类之间继承。令我着迷的是它如何用于内部静态类。考虑以下代码: 您能否解释一下如何访问其他内部类的私有字段?如果合法,为什么只能通过“ super.XXX”构造实现? 问题答案: 内部类是Java的较晚入门。添加它们时,它们仅作为编译器扩展添加,对JVM不变。 语言规范指出,内部类被允许访问在其内声明的类的私有成员。包括其他内部类。 为了使其工作,编译器会生成桥接

  • 我需要在我的应用程序中创建100个或更多的静态最终常数,我可以通过以下两种方式实现这一点: 创建一个简单的java并在该类中创建字段 创建接口时应将所有变量放入其中,因为接口中的所有字段都是隐式的 在上述方法中,我有以下问题: 哪种方法是实现这一目标的正确方法

  • 考虑java中的此类(数据不是私有的或公共的): 我将这个类转换为kotlin 反编译后的代码是这样的: 在kotlin类中,dataPart2调用数据getter(检查反编译代码中的第2行),但我需要访问数据的实际值而不是getter,在kotlin中是否可以访问字段而不调用getter?我不想更改getter或方法名称。

  • 问题内容: 在Java 8之前,我们无法在本地类中使用非最终变量。但是现在,它们允许final以及有效的final(其值未更改)可以被本地类引用。我所知道的(如果我错了,请纠正我),他们不支持引用非最终值,因为那里的值可以更改。因此,他们现在如何支持它,以及为什么以前不支持它。 问题答案: 实际上,情况根本没有改变。编译器稍微聪明一点,不再强迫您使用final关键字。 如果它检测到的变量是 有效的

  • 我目前正在学习继承,对于在超类中声明一个方法final应用于子类的限制,我有点困惑。假设我有一个具有取款方法的超类BankAccount,它需要用户密码和金额才能取款,并将帐户余额设置为(balance - amount)。我希望将该方法声明为final,这样其他子类就不会潜在地覆盖它,并允许客户端在不改变帐户余额的情况下取款。 我想避免这样的事情被允许: 然而,有些银行账户允许透支,在提款时也必