0

我有一个基类和一个派生类。我正在编写的代码是

class Base {
    ...
}

class derived extends base {
}

class Main {
    public static void main(String[] args){
        derived d = (derived) new Base(); //throws a ClassCastException 
    }
}

这是如何处理的?我想在不使用 super 关键字的情况下调用基类方法。

4

4 回答 4

1

基类是超类,派生类是子类。您无法在子类的引用中捕获超类的对象。

Base b = new Derived();

以上说明可行,但

但以下将不起作用。

Derived d = new Base();
于 2013-03-07T11:23:48.440 回答
0

你可以只调用超类的方法而不使用 super。

根据:

public class Base {

    public void print() {
        System.out.println("Base");
    }

}

衍生的:

public class Derived extends Base {...}

主要的:

public static void main(String[] args) {
    Derived d = new Derived();
    d.print();
}

打印出来:

Base

于 2013-03-07T11:39:49.940 回答
0

在 java 中不能向下转换。只有当基类存储派生类的引用时才有可能

Base b = new Derived()

// Check is required. It may lead to ClassCastException otherwise
if (b instancof D)     
    Derived d = (Derived) b;  
于 2013-03-07T12:20:57.453 回答
0

实际上“Base”不是“Derived”,因此无法进行强制转换。

在以下情况下是可能的

Base b = new Derived() Derived d = (Derived)b;

于 2013-03-07T11:46:09.417 回答