我对在Java中转换对象意味着什么感到困惑。
说你有..。
Superclass variable = new Subclass object();
(Superclass variable).method();这里发生了什么事?变量类型是改变了,还是变量中的对象发生了变化?很困惑。
发布于 2013-09-10 23:36:49
有时候,你会喜欢接受父母的推荐信作为论据,而在你的内心里,你可能想要做一些关于孩子的具体事情。
abstract class Animal{
public abstract void move();
}
class Shark extends Animal{
public void move(){
swim();
}
public void swim(){}
public void bite(){}
}
class Dog extends Animal{
public void move(){
run();
}
public void run(){}
public void bark(){}
}
...
void somethingSpecific(Animal animal){
// Here you don't know and may don't care which animal enters
animal.move(); // You can call parent methods but you can't call bark or bite.
if(animal instanceof Shark){
Shark shark = (Shark)animal;
shark.bite(); // Now you can call bite!
}
//doSomethingSharky(animal); // You cannot call this method.
}
...在上面的方法中,您可以通过Shark或Dog,但是如果您有这样的东西呢:
void doSomethingSharky(Shark shark){
//Here you cannot receive an Animal reference
}该方法只能通过传递鲨鱼引用来调用,因此,如果您有一个动物(它是一只鲨鱼),您可以这样调用它:
Animal animal...
doSomethingSharky((Shark) animal)总之,您可以使用父引用,如果您不关心父对象的实现,并且使用强制转换来使用子对象作为特定对象,那么它将是完全相同的对象,但是您的引用知道它,如果您不转换它,您的引用将指向同一个对象,但无法确定它将是哪种动物,因此只允许您调用已知的方法。
https://stackoverflow.com/questions/5306835
复制相似问题