有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:调用notdefined类型的方法

让我们看看这个代码

MyClass object;
object=new MySubClass();

其中MySubClass扩展了MyClass。 在此之后,我想调用MySubClass的一个方法 对象myMethod()

我得到一个编译错误,但在运行时它应该可以工作。如果没有这样的显式强制转换,我如何调用myMethod? ((MySubClass)对象)。myMethod()


共 (4) 个答案

  1. # 1 楼答案

    当您将object声明为具有类型MyClass时,您告诉编译器忘记object不是MyClass,可能没有任何其他方法不在MyClass上,诸如此类。你已经告诉编译人员要这么做了

    您的选项是告诉编译器一些不同的东西,方法是将object声明为具有类型MySubClass,或者执行强制转换。其实没有其他选择

  2. # 2 楼答案

    如果该方法是在子类中定义的,那么您将需要一个instanceof子类-

    MyClass object; // <-- Make this MySubClass object; **OR**
    object=new MySubClass();
    
    // instanceof
    if (object instanceof MySubClass) {
      MySubClass msc = (MySubClass) object;
      msc.doSomeMethod(); // <--
    }
    

    或者你可以在MyClass中使用abstract method-

    public abstract class MyClass {
      public abstract void doSomeMethod();
    }
    

    当然,MySubClass必须仍然有doSomeMethod()

    public class MySubClass extends MyClass {
      public void doSomeMethod() {
        System.out.println("Hello");
      }
    }
    

    那你可以用

    object.doSomeMethod();
    
  3. # 3 楼答案

    您可以将object声明为MySubClass类型

    MySubClass object = new MySubClass();
    

    或者,您可以测试MyClass是否真的是MySubClass,然后将其转换为MySubClass,以便调用该方法

    if (object instanceof MySubClass)
    {
        MySubClass sub = (MySubClass) object;
        sub.myMethod();
    }
    

    或者,您可以在类MyClass中定义myMethod,以便任何MyClass实例都可以调用该方法

  4. # 4 楼答案

    How can i call myMethod?

    可以将对象声明为MySubClass类型:

    MySubClass object = new MySubClass();
    

    为什么因为在执行以下操作时,对象会:

    MyClass object = new MySubClass();
    

    对象的类型为MyClass,因此只能从MyClass调用方法

    看看这个例子:假设您有一个类Person和一个子类Employee,其中有一个名为salary的额外字段(及其各自的getter/setter)。如果您声明了一个对象,如:

    Person p1 = new Employee();
    

    然后你不想调用它的方法getSalary(),因为实际上,p1Person类型。不能对其使用“specific”(在子类中声明)方法