Java:调用未定义类型的方法
让我们看看这个代码Java:调用未定义类型的方法,java,Java,让我们看看这个代码 MyClass object; object=new MySubClass(); 其中MySubClass扩展了MyClass。 在此之后,我想调用MySubClass的一个方法 object.myMethod() 我得到一个编译错误,但在运行时它应该可以工作。如果没有这样的显式强制转换,我如何调用myMethod? ((MySubClass)对象).myMethod() 如何调用myMethod 您可以将对象声明为MySubClass的类型: MySubClass obj
MyClass object;
object=new MySubClass();
其中MySubClass扩展了MyClass。
在此之后,我想调用MySubClass的一个方法
object.myMethod()
我得到一个编译错误,但在运行时它应该可以工作。如果没有这样的显式强制转换,我如何调用myMethod?
((MySubClass)对象).myMethod()
如何调用myMethod
您可以将对象声明为MySubClass
的类型:
MySubClass object = new MySubClass();
为什么?因为对象在执行以下操作时:
MyClass object = new MySubClass();
对象的类型为MyClass
,因此只能从MyClass
调用方法
看看这个例子:假设您有一个类Person
和一个子类Employee
,其中有一个名为salary
的额外字段(及其相应的getter/setter)。如果声明的对象类似于:
Person p1 = new Employee();
然后您不想调用它的方法getSalary()
,因为实际上,p1
属于Person
类型。不能对其使用“specific”(在子类中声明)方法
如何调用myMethod
您可以将对象声明为MySubClass
的类型:
MySubClass object = new MySubClass();
为什么?因为对象在执行以下操作时:
MyClass object = new MySubClass();
对象的类型为MyClass
,因此只能从MyClass
调用方法
看看这个例子:假设您有一个类Person
和一个子类Employee
,其中有一个名为salary
的额外字段(及其相应的getter/setter)。如果声明的对象类似于:
Person p1 = new Employee();
然后您不想调用它的方法
getSalary()
,因为实际上,p1
属于Person
类型。您不能对其使用“specific”(在子类中声明)方法。您可以将对象
声明为MySubClass
类型
MySubClass object = new MySubClass();
或者,您可以测试您的MyClass
是否真的是MySubClass
,然后强制转换到MySubClass
,以便调用该方法
if (object instanceof MySubClass)
{
MySubClass sub = (MySubClass) object;
sub.myMethod();
}
或者,您可以在类
MyClass
中定义myMethod
,以便任何MyClass
实例都可以调用该方法。您可以将object
声明为MySubClass
类型
MySubClass object = new MySubClass();
或者,您可以测试您的MyClass
是否真的是MySubClass
,然后强制转换到MySubClass
,以便调用该方法
if (object instanceof MySubClass)
{
MySubClass sub = (MySubClass) object;
sub.myMethod();
}
或者,您可以在类
MyClass
中定义myMethod
,以便任何MyClass
实例都可以调用该方法。当您将object
声明为typeMyClass
时,您是在告诉编译器忘记object
不是MyClass
,在MyClass
等上可能没有任何其他方法。您已经告诉编译器这样做
您的选项是通过将
对象
声明为具有类型MySubClass
,或执行强制转换,来告诉编译器一些不同的内容。实际上没有其他选项。当您将对象
声明为具有类型MyClass
时,您告诉编译器忘记对象
不是MyClass
,可能没有任何其他方法不在MyClass
上,诸如此类。您已经告诉编译器这样做
您的选项是通过将
对象
声明为具有类型MySubClass
,或执行强制转换,来告诉编译器一些不同的内容。实际上没有其他选项。如果方法是在子类中定义的,那么您将需要子类的-
MyClass object; // <-- Make this MySubClass object; **OR**
object=new MySubClass();
// instanceof
if (object instanceof MySubClass) {
MySubClass msc = (MySubClass) object;
msc.doSomeMethod(); // <--
}
当然,MySubClass
必须仍然具有doSomeMethod()
那你可以用
object.doSomeMethod();
如果该方法是在子类中定义的,那么您将需要子类的-
MyClass object; // <-- Make this MySubClass object; **OR**
object=new MySubClass();
// instanceof
if (object instanceof MySubClass) {
MySubClass msc = (MySubClass) object;
msc.doSomeMethod(); // <--
}
当然,MySubClass
必须仍然具有doSomeMethod()
那你可以用
object.doSomeMethod();
为什么不将对象声明为MySubClass?我不能,我不知道具体的类型,我只知道它将是MyClass类型。我认为正确的答案是关于反射的问题,但无法获得要点是否可以将MyClass设置为抽象并将方法myMethod()添加到MyClass中作为抽象?不能,我正在使用标准类:为什么不将对象声明为MySubClass?我不能,我不知道具体的类型,我只知道它将是MyClass类型。我认为正确的答案是关于反射的问题,但无法获得要点。是否可以将MyClass设置为抽象类,并在MyClass中添加方法myMethod()作为抽象类?不能,我正在使用标准类:P