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

如何在不铸造对象的情况下处理多态性?

苏昊英
2023-03-14
 class A{
    int a;
    
    public int getA(){
        return a;
    } 
    
    public void setA(int a){
        this.a=a;
    }
}

//类B扩展类并添加一个附加变量

 class B extends A{
    int b;
    public int getB(){
        return b;
    } 
    
    public void setB(int b){
        this.b=b;
    }
}

//这是主类

class HelloWorld {
    public static void main(String[] args) {
        
        A aa;
          if(runtime conditon)   {         
                aa= new B();
                  aa.setA(3);
                  ((B)aa).setB(4); 
            }
          else{
          aa= new A();
                  aa.setA(3);
          }
}
}
         


        

在不使用铸造的情况下如何设计解决上述问题?很抱歉问了这个低级的问题(我是java新手)。

共有1个答案

姬振濂
2023-03-14

由于类B扩展了类A,您可以使用A类的变量来指向B类的变量,但如果您只想使用A类的一个变量(在您的示例中为aa),则无法在不强制转换对象的情况下使用B类的方法。

因为您必须记住,当您使用指向派生类型use(在您的案例类型B中)的变量(在您的案例类型a中)时,您只能使用在类a中定义的方法,其余的方法将被遮蔽。通过将对象转换为true类型,您可以使用它的所有方法。

 类似资料:
  • 假设我有这个方法: 我想调用这个方法,获取字符串,将该字符串转换为整数7,然后以非阻塞方式返回该整数。我该怎么做? 我试过这个,但是函数阻塞(同步): 我尝试使用代替(异步): 但是我得到了这个错误:<代码>类型不匹配:无法从int转换为Mono 那我该怎么办?

  • 我正在尝试使用ARCore在屏幕上不点击的情况下显示对象。在Google提供的ARCore Sceneform的基本示例中,您需要在屏幕检测到表面后点击屏幕。 我想实现这一点,AR在不点击屏幕的情况下显示对象。 我试着在不点击屏幕的情况下进行显示。 如果有人知道怎么做,请帮助我。提前感谢

  • 我正在实现一个排序列表类,在这个类中,我将对任何类型的对象进行排序,所以现在我想测试对象是否具有可比性, 我用这段代码覆盖了compareTo()方法:- 所以现在我需要给这些对象分配数字,像这样 但它总是给我一个例外:- 线程“main”中出现异常Java . lang . classcastexception:Java . lang . integer不能转换为java.lang.String

  • 假设我有一个旋转90度的正方形(我发现这是为我的计算机准备的)和一个旋转75度的第二个正方形。第一个正方形的左上角和第二个正方形的左下角相连。 我的目标是使用三角学来编辑第二个正方形的位置,以便它的右下角和第一个正方形的右上角(两个高亮的角)连接起来。 在一张不太硬的纸上。我会用sin和cos来求x和y的偏移量。在本例中,代码类似于:

  • 问题内容: 假设我有一个这样的ADT: circe中实例的默认通用派生期望输入JSON包含一个包装对象,该包装对象指示要表示的案例类: 这种行为意味着,如果两个或多个案例类具有相同的成员名称,我们就不必担心歧义,但这并不总是我们想要的—有时我们知道展开的编码将是明确的,或者我们想通过指定顺序来消除歧义每个案例类都应该尝试,否则我们不在乎。 如何在没有包装的情况下(最好不必从头开始编写编码器和解码器

  • 我可以将json对象下载为字符串而无需在Android设备上使用Retrofit进行解析吗? 当我尝试直接接近时 我有一个错误: