识别扩展类对象

Mac*_*ans 5 java

在Java中,我有一个类Num,以及一些扩展的类Num,比如Num_intNum_double.我想知道方法是否可以识别给定Num对象是否是一个Num_int.

我有以下代码:

void test(Num_int x) {
  System.out.println("int");
} // test
void test(Num x) {
  System.out.println("other");
} // test

Num_int A = new Num_int( );
Num B     = new Num_int( );
Num C     = new Num_double( );

test(A); // prints "int"
test(B); // prints "other"
test(C); // prints "other"
Run Code Online (Sandbox Code Playgroud)

不幸的是,当给出A作为参数时,方法"test"仅打印"int".当B通过时,我也不能打印"int",因为B是通过创建的Num B = new Num_int( );.这可能吗?

谢谢.

NPE*_*NPE 2

这可以使用运算符和铸造来完成instanceof。然而,这是一种糟糕的编程习惯。

更好的选择是使其成为test()final成员Num,并在每个类中适当地覆盖它。然后你只需调用A.test(),Java 的动态调度就会为你处理好一切。

public class Num {
  public void test() {
    System.out.println("other");
  }
}

public class Num_int extends Num {
  public void test() {
    System.out.println("int");
  }
}

public class Num_double extends Num {
  // inhertis Num.test()
}
Run Code Online (Sandbox Code Playgroud)