2011-04-02 166 views
1

我有一个主要的类有一些公共常量变量,我有一个自定义类,我想知道如何从自定义类访问主类的常量?如何从子类访问主类的公共常量变量?

主类代码:

import processing.core.*; 
import toxi.geom.*; 
import toxi.math.*; 

public class VoronoiTest extends PApplet { 

    // this are the constants I want to access from the Site class 
    public static int NUM_SITES   = 8; 
    public static int SITE_MAX_VEL  = 2; 
    public static int SITE_MARKER_SIZE = 6; 

    Site[] sites; 

    public void setup() { 
     size(400, 400); 

     sites = new Site[NUM_SITES]; 
     for (int i = 0; i < sites.length; i++) { 
      sites[i] = new Site(this); 
     } 
    } 
} 

这是站点类代码:

import processing.core.*; 


public class Site { 
    PApplet parent; 

    float x, y; 
    PVector vel; 

    int c; 

    Site (PApplet p) { 
      parent = p; 
      // here I try to get the constants from the main class 
      vel = new PVector(parent.random(-parent.SITE_MAX_VEL, SITE_MAX_VEL), parent.random(-SITE_MAX_VEL, SITE_MAX_VEL));  
    } 
} 

任何帮助将非常感激!

+0

网站不是VoronoiTest的子类。 – 2011-04-02 12:12:10

回答

3

你不能。由于parent的类型为PApplet,而不是VoronoiTest,因此无法保证其具有静态成员SITE_MAX_VEL。

相反,如果parentVoronoiTest类型的,就不会有在通过实例访问静态变量小点,因为这将是不可能的它改变。如上所述,要访问静态成员,请使用ClassName.STATIC_MEMBER表示法(在本例中为VoronoiTest.SITE_MAX_VEL)。

尽管如此,只是将常量存储在Site类中。毕竟,这对他们来说似乎是最合乎逻辑的地方。

import processing.core.*; 

public class Site { 
    public static final int COUNT  = 8; 
    public static final int MAX_VEL  = 2; 
    public static final int MARKER_SIZE = 6; 

    PApplet parent; 

    float x, y; 
    PVector vel; 

    int c; 

    Site(PApplet p) { 
     parent = p; 
     vel = new PVector(
      parent.random(-MAX_VEL, MAX_VEL), 
      parent.random(-MAX_VEL, MAX_VEL) 
     );  
    } 
} 
0

使用VoronoiTest参考。例如,VoronoiTest.SITE_MAX_VEL。当您使用PApplet引用时,编译器无法知道存在静态变量。

0

静态字段通过类名访问。使用VoronoiTest.SITE_MAX_VEL