gpt4 book ai didi

java - 使用子类对象修改其父类(super class)对象中的 protected 属性

转载 作者:行者123 更新时间:2023-12-02 08:33:10 25 4
gpt4 key购买 nike

抱歉这个蹩脚的标题,我没有为我的 Java 问题想出更好的版本。我现在使用Java版本:1.6.0_18和Netbeans版本:6.8

现在提问。

我所做的是创建一个只有一个 protected int 属性的类,接下来我创建了一个公共(public)方法来将 int 属性设置为给定值。然后我创建了该类的一个对象,并使用所述公共(public)方法将 int 属性设置为 5。现在我需要您的帮助来创建另一个类,该类将采用所述对象并公开它的 protected int 属性。

我想到的方法是创建一个子类来继承该类,然后创建一个方法来获取父类(super class)的 int 属性。我成功地创建了获取 int 属性的代码,但现在我不知道如何使用这个新的子类来引用父类(super class)的对象。

这是我迄今为止所上的两门课:

public class A{  protected int iNumber;  public void setNumber ( int aNumber )  {    iNumber = aNumber;  }}
public class B extends A{  public int getNumber()  {   return super.iNumber;  }}

我创建了一个“A”对象,并使用它的方法将其属性设置为 5,如下所示:

A objA = new A();objA.setNumber ( 5 );

现在我想创建一个“B”对象来输出存储在“objA”属性中的int。我尝试运行此代码:

B objB = (B) objA;String aNumber_String = String.valueOf( objB.getNumber() );System.out.println( aNumber_String );

但我在第一行收到错误:“java.lang.ClassCastException”

 B objB = (B) objA; 

请问有办法做我想做的事吗?

附注我希望这个想法能够实现,因为我不想通过给 A 类提供 getter 方法来编辑它(除非我别无选择)。

P.P.S 另外,我知道公开属性而不是使其私有(private)并使用公共(public) setter/getter 方法是一个“坏”主意,但我喜欢这种方式:)。

编辑:添加代码标签

最佳答案

对于线路

B objB = (B) objA;

A的对象不是类B的对象,因此不允许强制转换。

AB 之间的类关系是,B is-a A,(因为类 B 扩展了 A),但在这种情况下不能说相反的情况。

以下面为例,存在以下情况:

  • 动物
  • Dog扩展了Animal

上面示例中尝试的是将 Animal 转换为 Dog:

Dog dogObject = (Dog)animalObject;  // Not allowed.

情况不一定如此,因为并非所有 Animal 都是 Dog ——据我们所知,animalObject 可能是Cat 类的实例,它扩展了 Animal,它绝对不是 Dog

关于java - 使用子类对象修改其父类(super class)对象中的 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2734224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com