首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

回答 10

Stack Overflow用户

发布于 2011-03-15 02:32:31

请看一下这个示例:

代码语言:javascript
复制
public class A {
  //statements
}

public class B extends A {
  public void foo() { }
}

A a=new B();

//To execute **foo()** method.

((B)a).foo();
票数 83
EN

Stack Overflow用户

发布于 2011-03-15 04:06:00

假设您有一个超类果树和子类Banana,并且您有一个方法addBananaToBasket()

例如,该方法将不接受葡萄,因此您需要确保将香蕉添加到篮子中。

所以:

Fruit myFruit = new Banana();

((Banana)myFruit).addBananaToBasket();⇐--这叫做铸造

票数 54
EN

Stack Overflow用户

发布于 2013-12-02 00:09:22

您所引用的示例在java中称为Upcasting。

它使用指向它的超类变量创建子类对象。

变量不变,它仍然是超类的变量,但它指向子类的对象。

例如,假设你有两个类机器和照相机;照相机是机器的一个子类

代码语言:javascript
复制
class Machine{

    public void start(){

        System.out.println("Machine Started");
    }
}

class Camera extends Machine{
     public void start(){

            System.out.println("Camera Started");
        }
     public void snap(){
         System.out.println("Photo taken");
     }
 }
Machine machine1 = new Camera();
machine1.start();

如果您执行上述语句,它将创建一个带有指向it.So的机器类引用的照相机类实例,现在输出将是"Camera Started“,变量仍然是Machine的引用。如果尝试machine1.snap();,代码将不会编译

所有的相机都是机器,因为照相机是机器的子类,但是所有的机器都不是相机。因此,您可以创建一个子类对象,并将其指向一个超类参考,但您不能要求超类引用来执行子类对象的所有功能(在我们的示例中,machine1.snap()不会编译)。超类引用只能访问超类已知的函数(在我们的示例machine1.start()中)。你不能要求一台机器的参考来抓拍。:)

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5306835

复制
相关文章

相似问题

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