如何从子类访问主类的公共常量变量?
问题描述:
我有一个主要的类有一些公共常量变量,我有一个自定义类,我想知道如何从自定义类访问主类的常量?如何从子类访问主类的公共常量变量?
主类代码:
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));
}
}
任何帮助将非常感激!
答
你不能。由于parent
的类型为PApplet
,而不是VoronoiTest
,因此无法保证其具有静态成员SITE_MAX_VEL。
相反,如果parent
是VoronoiTest
类型的,就不会有在通过实例访问静态变量小点,因为这将是不可能的它改变。如上所述,要访问静态成员,请使用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)
);
}
}
答
使用VoronoiTest参考。例如,VoronoiTest.SITE_MAX_VEL。当您使用PApplet引用时,编译器无法知道存在静态变量。
答
静态字段通过类名访问。使用VoronoiTest.SITE_MAX_VEL
。
网站不是VoronoiTest的子类。 – 2011-04-02 12:12:10