抱歉这个蹩脚的标题,我没有为我的 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
的对象,因此不允许强制转换。
A
和 B
之间的类关系是,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/