当前位置: 首页 > 知识库问答 >
问题:

如果只初始化了超类对象,是否可以调用子类特定的方法?

闻深
2023-03-14

让我们从一个非常简单的例子中推断出来:a类:

public class a{
public a{}

子类b继承A:

public class b inherits a{
public b{super}
public void customMethodB(){}
public class c inherits a{
public c{super}
public void customMethodC(){}
public class Main{
public static void main(String[] args){
a newObject = null;
//User can now choose through input if he wants to create b or c. Lets say he creates b:
newObject = new b();
//His choice is stored in a string.
String userChoice = b;
//I now call the general object from another method for the user to interact with.
//(I have a feeling it is here my problem is).
}

userInteraction(a newObject, String userChoice){
if (userChoice.equals("b"){
newObject.customMethodB();
}
else if (userChoice.equals("c"){
newObject.customMethodC();
}

共有1个答案

班思源
2023-03-14

您的方法customMethodB在类型A中不存在。为了调用此方法,您必须强制转换对象(这里可以向下强制转换)

if (userChoice.equals("b") && newObject instanceof b){
((b)newObject).customMethodB();
}
 类似资料:
  • 问题内容: 动物是狗的超类,狗有一种叫bark的方法 考虑以下: 会发生什么? the assignment isn’t allowed the call to bark is allowed and “woof” is printed at run time the call to bark is allowed but nothing is printed the call to bark c

  • 问题内容: SuperClass object = new SubClass(); 为什么使用超类实例化上面的子类对象?因为我学会实例化对象的唯一方法是: 我正在学习Java。 问题答案: 您可能有一个仅接受实例的方法。由于 是 ,您可以使用的实例并将其视为。 使用接口时,会使用相同的行为: 这就是多态的美。它允许您更改类内部的实现,而无需破坏其余代码。

  • 问题内容: 是否可以在python中使用全1来初始化切片? 蟒蛇: 高朗 有可能做得更好吗? 问题答案: 是的,但是您必须使用其他语法。 它被称为“复合文字” 另外,如果有理由进行迭代(如计算基于循环变量的值等),则可以使用关键字而不是旧式,因为i等于i,小于i ++循环。

  • 我找不到任何关于这个具体案例的具体SO帖子,所以我想问一下我认为是/否的问题。 以下是JLS§12.4.2(Java SE 8),清单6-7: 我的问题是:这是否意味着子类的final static变量在超类的静态初始化之前初始化(假设final static作为其声明的一部分初始化)?

  • 我有一份抽象的课堂报告: 我需要强制所有子类填充此 surrogateId 属性。(如果子类未填充属性,则会出现编译错误) 我尝试使用 final 关键字来强制我在构造函数中引入此属性的值,但我必须手动生成构造函数而不是使用 Lombok,很多样板代码。有没有办法在不手动生成结构的情况下实现相同的期望。

  • 好的,我的基本类层次结构如下: 这是形状和圆的代码。无需阅读,仅供参考;无论如何,主要是getter和setter。如果我的错误不明显,我建议最后看看它们。 还有circle课程。 我的问题与以下代码执行的结果有关: 注意:很抱歉代码太多;我只是不知道抽象类是否有什么奇怪的地方,或者是误解的真正根源。 我无法解释输出,其内容如下: 由此可以看出,第一个print命令引用的是toString的cir