首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的铸造对象

Java中的铸造对象
EN

Stack Overflow用户
提问于 2011-03-15 02:24:38
回答 10查看 272.7K关注 0票数 60

我对在Java中转换对象意味着什么感到困惑。

说你有..。

代码语言:javascript
复制
Superclass variable = new Subclass object();
(Superclass variable).method();

这里发生了什么事?变量类型是改变了,还是变量中的对象发生了变化?很困惑。

EN

Stack Overflow用户

发布于 2013-09-10 23:36:49

有时候,你会喜欢接受父母的推荐信作为论据,而在你的内心里,你可能想要做一些关于孩子的具体事情。

代码语言:javascript
复制
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,但是如果您有这样的东西呢:

代码语言:javascript
复制
void doSomethingSharky(Shark shark){
 //Here you cannot receive an Animal reference
}

该方法只能通过传递鲨鱼引用来调用,因此,如果您有一个动物(它是一只鲨鱼),您可以这样调用它:

代码语言:javascript
复制
Animal animal...
doSomethingSharky((Shark) animal)

总之,您可以使用父引用,如果您不关心父对象的实现,并且使用强制转换来使用子对象作为特定对象,那么它将是完全相同的对象,但是您的引用知道它,如果您不转换它,您的引用将指向同一个对象,但无法确定它将是哪种动物,因此只允许您调用已知的方法。

票数 6
EN
查看全部 10 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5306835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档