【问题标题】:Why can't I assign a derived class object to base class object in java?java - 为什么我不能将派生类对象分配给java中的基类对象?
【发布时间】:2014-08-13 22:18:34
【问题描述】:

代码如下:

class base
{
    public void abc()
    {
        System.out.print("what's up dude");
    }
}

class derived
{
    public void abc()
    {
        System.out.print("wad up ");
    }
}

public class superreftosub
{
    public static void main(String args[])
    {
        base b=new base();
        derived d=new derived();
        base b=d;
        b.abc();
    }
}

【问题讨论】:

  • 您不会将对象分配给对象。
  • derived 目前没有扩展 base。您在main 中声明了两个b 变量。
  • 你没有派生。扩展在哪里?
  • 将一个对象分配给另一个只是分配对象引用(或多或少的指针)。它不会复制成员变量等。您需要阅读有关克隆的信息。从 wiki for Java clone() 的第一段开始:在 Java 中,对象是通过引用变量来操作的,并且没有用于复制对象的操作符——赋值操作符复制引用,而不是对象。 clone() 方法提供了这个缺失的功能。

标签: java oop subclass superclass


【解决方案1】:

你应该使用extends关键字来继承一个类,

喜欢

class derived extends base {
    //...
}

【讨论】:

    【解决方案2】:
    【解决方案3】:

    您必须使用超类-子类关系:

    所以:

    class derived extends base {
    
        @Override
        public void abc() {
            System.out.print("wad up ");
        }
    }
    

    在一些弱类型编程范例(例如鸭子类型)中,这确实不是必需的。然而,Java 是强类型的(Java 不是完全强类型的,但这是另一个讨论)并且只允许分配扩展类型,并且您只能使用 @Override 注释为方法提供新定义。

    【讨论】:

    • 技术上你没有注释你的覆盖方法,但总是这样做是个好主意。
    • @Override 关键字确保编译器检查超类中是否存在具有该签名的方法。这不是必需的,但会减少错误的数量。我同意您的评论,但应该尝试就如何生成好的代码提出建议。
    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 2016-08-20
    • 2015-11-07
    • 2014-09-19
    • 2012-01-13
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多