如何在不使用getter的情况下访问派生类的静态成员?

保利

标题说明了一切。

我在每个派生类中都有唯一的颜色,并且将其声明为静态。

就像这样:

    class CandyBlue extends Candy
   {
      public static final String color = "blue";
   }



 class CandyRed extends Candy
   {
      public static final String color = "red";
   }

那么我有一个糖果类型的对象S

class CandyFrenzy
{ 
   Candy candies[][];
   public CandyFrenzy()
   {
    candies = new Candy[4][4];
    candies[0][0] = new CandyBlue();
    candies[0][1] = new CandyRed();
    ....
   }

   public static void main(String args[])
   {
     CandyFrenzy candyFrenzy = new CandyFrenzy();
      Candy candy;
     for(int a=0; a<4; a++)
     {
       for(int b=0; b<4; b++)
       {
          candy = candies[a][b];
          //print the color of the candy;
       }
     }
   }
}

Candy班没有一个成员的颜色,所以我不需要将它张贴。Candy类的唯一重要性是出于多态目的。上面的代码未尝试过,因此如果即时通讯无法确定它是否相应运行。我如何打印糖果的颜色?

CKing

假设Candy该类具有color变量,则可以通过说出糖果的颜色candy.color

话虽如此,该语句candy.color始终将打印出分配给类中color变量的值Candy这是因为运行时多态性仅适用于实例方法。字段(无论是否static)在编译时使用引用类型进行解析。

您需要对所有课程进行以下更改:

  1. 使Candy不可变。您可以在答案中了解如何使类不可变还要在中添加一个getColor方法Candy
  2. 一旦使Candy不可变成为可能,就可以使用所需的颜色实例化它们。例如:candies[0][0] = new Candy("blue");
  3. Candy每个不需要一个子类color相反,您可以Candy为每个new实例化一个新对象color例如candies[0][1] = new Candy("red");
  4. 您可以说出coloraCandycandy.getColor()

话虽如此,您也可以考虑使用被enum调用方式,Candy而不是使用Candy类,因为看起来您想要的只是一个表示一个的String常量color

public enum Candy {
    RED,BLUE,GREEN;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用C#定义静态类的情况下访问const值?

如何在不使用Setter的情况下使用Getter

如何在不使用类名的情况下从类中访问类本身

如何在不使用std :: function创建类实例的情况下使用成员函数?

如何在不使用member.functionName语法C ++的情况下访问成员函数?

如何在不使用((CMainFrame *)AfxGetMainWnd())-> ...的情况下访问Mainfrm成员变量状态?

如何在不使用静态的情况下将数据传递给 symfony 表单类

如何在没有CWinApp派生类的情况下实现MFC序列化?

如何在不使用分配的情况下访问类中的私有变量?

C++:如何在没有模板参数的情况下访问模板化类的静态成员

组成:如何在不使用nullpointerexception的情况下使用点表示法访问非静态变量?

TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?

如何在不使用 .h 中的 extern 的情况下访问其他文件中的静态变量?

如何在不强制转换或复制签名的情况下使基类模板函数对派生类实例可见?

如何在没有访问类类型的情况下获取类成员

如何在不转换回基类类型的情况下以其派生类型返回对象?

UML类-在没有派生类的情况下使用基类

如何在不使用 extends 关键字的情况下从另一个类访问方法?

如何在不使用 setter 的情况下从子类访问超类中的私有字段?

如何在不使用BasicFileAttribute类的情况下获取Android中任何文件的上次访问时间

C#如何在不使用值的情况下显式调用getter

如何在不使用foreach的情况下修复“调用数组上的成员函数xy”?

在不使所有派生类通用的情况下,自动使每个派生类的属性属于某种类型的最佳方法是什么?

在不指定派生类的情况下声明对象

如何在不使用静态 rect 方法的情况下创建 IDOMPathGeometryPtr?

如何在不使用静态函数的情况下重写此高阶函数?

如何在不使用静态方法的情况下实现单例?

如何在不使用 opemMP 的情况下按静态顺序运行所有线程?

如何在kotlin中定义类,成员可以在java派生类中访问