Java:调用notdefined类型的方法
让我们看看这个代码
MyClass object;
object=new MySubClass();
其中MySubClass扩展了MyClass。 在此之后,我想调用MySubClass的一个方法 对象myMethod()
我得到一个编译错误,但在运行时它应该可以工作。如果没有这样的显式强制转换,我如何调用myMethod? ((MySubClass)对象)。myMethod()
你可以在下面搜索框中键入要查询的问题!
让我们看看这个代码
MyClass object;
object=new MySubClass();
其中MySubClass扩展了MyClass。 在此之后,我想调用MySubClass的一个方法 对象myMethod()
我得到一个编译错误,但在运行时它应该可以工作。如果没有这样的显式强制转换,我如何调用myMethod? ((MySubClass)对象)。myMethod()
# 1 楼答案
当您将
object
声明为具有类型MyClass
时,您告诉编译器忘记object
不是MyClass
,可能没有任何其他方法不在MyClass
上,诸如此类。你已经告诉编译人员要这么做了您的选项是告诉编译器一些不同的东西,方法是将
object
声明为具有类型MySubClass
,或者执行强制转换。其实没有其他选择# 2 楼答案
如果该方法是在子类中定义的,那么您将需要一个instanceof子类-
或者你可以在
MyClass
中使用abstract method-当然,
MySubClass
必须仍然有doSomeMethod()
那你可以用
# 3 楼答案
您可以将
object
声明为MySubClass
类型或者,您可以测试
MyClass
是否真的是MySubClass
,然后将其转换为MySubClass
,以便调用该方法或者,您可以在类
MyClass
中定义myMethod
,以便任何MyClass
实例都可以调用该方法# 4 楼答案
可以将对象声明为
MySubClass
类型:为什么因为在执行以下操作时,对象会:
对象的类型为
MyClass
,因此只能从MyClass
调用方法看看这个例子:假设您有一个类
Person
和一个子类Employee
,其中有一个名为salary
的额外字段(及其各自的getter/setter)。如果您声明了一个对象,如:然后你不想调用它的方法
getSalary()
,因为实际上,p1
是Person
类型。不能对其使用“specific”(在子类中声明)方法