Java继承:如何找到对象所属的子类?

Java继承:如何找到对象所属的子类?,java,inheritance,Java,Inheritance,我不太确定如何在标题中使用它,但下面是一个用例 我有一个班级考试。测试有一个名为Letter as的属性 public class Test() { Letter x; } 字母可以是几个子类之一 class A() class B() class C() 现在假设在一个类中(我们称之为driver),我有一个Test实例。我想弄清楚这个测试的字母是否是A、B、C等等,这样我就可以访问子类特有的属性。见: public class Driver() { Test t; }

我不太确定如何在标题中使用它,但下面是一个用例

我有一个班级考试。测试有一个名为Letter as的属性

public class Test() {
    Letter x;
}
字母可以是几个子类之一

class A()
class B()
class C()
现在假设在一个类中(我们称之为driver),我有一个Test实例。我想弄清楚这个测试的字母是否是A、B、C等等,这样我就可以访问子类特有的属性。见:

public class Driver() {
    Test t;
}
如果我使用t.getClass(),我将得到Class.Test还是子类(例如Class.A)?驱动程序类是否可能知道x的子类

是否可以创建如下方法:

public Class getSubclassFromLetter(Letter x) {
    // Find subclass from the letter
}

您可以使用
instanceof
。这样做并不是一个好的做法,但您可以做到以下几点:

if (x instanceof A) {
    //TODO whatever related to A
}

您可以使用
instanceof
。这样做并不是一个好的做法,但您可以做到以下几点:

if (x instanceof A) {
    //TODO whatever related to A
}

使用
instanceof
Class#getClass()

getClass()
将返回以下任一项:
A.class
B.class
C.class

A returned = getA();

if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }

也就是说,有时人们认为使用
instanceof
getClass()
是一种不好的做法。

使用
instanceof
Class#getClass()

getClass()
将返回以下任一项:
A.class
B.class
C.class

A returned = getA();

if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }
也就是说,有时人们认为使用
instanceof
getClass()
是一种不好的做法。

如果我使用t.getClass()“-那么,当你尝试时会发生什么?”这样我就可以访问子类特有的属性。“那么你的设计就不好了。”。最重要的OO原则之一是信息隐藏,这基本上意味着没有其他类知道对象具有什么属性。可能重复“如果我使用t.getClass()”-那么,尝试时会发生什么?“这样我就可以访问子类特有的属性。”那么您的设计就糟糕了。最重要的OO原则之一是信息隐藏,这基本上意味着没有其他类知道对象具有什么属性