Adj*_*ion 1 java reflection inheritance runtime
假设我有以下对象层次结构:
public abstract class Animal {
...
}
public class Canine extends Animal {
...
}
public class Feline extends Animal {
...
}
public class Dog extends Canine {
...
}
public class Wolf extends Canine {
...
}
public class Leopard extends Feline {
...
}
Run Code Online (Sandbox Code Playgroud)
假设Animal
该类有一个最终方法,需要采取不同的操作,具体取决于对象的运行时类型/类是什么:
public abstract class Animal {
// Lots of stuff blah blah blah
public final makeNoise() {
// If we're a Dog, then System.out.println("Woof!");
// Else if we're a Wolf, then System.out.println("Gggrrrrr!");
// etc.
}
}
Run Code Online (Sandbox Code Playgroud)
这里是踢球者:我知道最佳实践和OOP会让我写成makeNoise()
一个抽象方法,然后在每个子类中实现一个不同的版本.但是,由于这个问题范围之外的原因,我不能这样做.
因此,除了最好的OOP实践外,我怎么能从父makeNoise()
方法中说出我们的运行时类是什么?