Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法访问对象子类';什么是变量?(Java/Android)_Java_Android_Variables_Object_Subclass - Fatal编程技术网

无法访问对象子类';什么是变量?(Java/Android)

无法访问对象子类';什么是变量?(Java/Android),java,android,variables,object,subclass,Java,Android,Variables,Object,Subclass,我有一个名为“Quad”的自定义类,它创建了一个带纹理的Quad,在我的2D OpenGL ES 2.0游戏中用作精灵 public class Quad(){ //Quad creation stuff here } 然后我有一个单独的子类(即,在不同的文件中,而不是内部类) 我创建对象的方式如下: Quad hero = new Hero(); 但是,如果我试图访问'heroX'和'heroY'变量,我将一无所获 那我试试看 hero.heroX 但是上面没有提到这个变量 会的。但

我有一个名为“Quad”的自定义类,它创建了一个带纹理的Quad,在我的2D OpenGL ES 2.0游戏中用作精灵

public class Quad(){

//Quad creation stuff here

}
然后我有一个单独的子类(即,在不同的文件中,而不是内部类)

我创建对象的方式如下:

Quad hero = new Hero();
但是,如果我试图访问'heroX'和'heroY'变量,我将一无所获

那我试试看

hero.heroX
但是上面没有提到这个变量

会的。但是,请查找位于我的Quad类中的变量。但我会认为,通过将我的四元类扩展到我的英雄类,它们将通过我的对象可用


有人能解释一下我的想法哪里出了问题,以及我如何访问这两个变量吗?谢谢

您的变量
hero
的类型是
Quad
,而不是
hero
,因此编译器只知道它是
Quad
。如果要访问
Hero
方法,请使用特定的子类型。

您的变量
Hero
Quad
类型,而不是
Hero
,因此编译器只知道它是
Quad
。如果您想访问
Hero
方法,请使用特定的子类型。

如果他使用访问者。。我认为这不是问题所在。也许用其他语言。如果不是,我的答案就大错特错了。@Lewsterin-正确的答案是访问和正确的类型都是必需的。然而,Java在默认情况下是包私有的(因此同一个包中的任何类都可以读取这些变量),而不是私有的;它工作正常-这样做我可以从Quad类和Hero类访问所有方法和变量-为什么?当然,如果我将hero声明为Quad(),那么当我创建对象时,将其创建为新的“hero”(也是Quad)-编译器肯定知道它是hero,也是Quad?如果不是,那么说“Quad hero=new hero()”有什么意义呢?我在Java代码中多次看到过类似的说法……困惑!!:-/@Zippy-假设你有一个
英雄
和一个
平民
,都是
四元组
的子类,你想要每个人的列表。然后,您可以创建一个
Quad
s列表,并将
Hero
s和
Commoner
s都放在该列表中,然后访问所有公共
Quad
变量和方法,而无需知道谁是谁。这就是多态性(不需要知道它们是什么子类才能访问共享行为)。@ianhanniballake如果Quad提供了可以重写的访问器,则类型不是问题。喜欢这个新节目吗?如果他使用访问者。。我认为这不是问题所在。也许用其他语言。如果不是,我的答案就大错特错了。@Lewsterin-正确的答案是访问和正确的类型都是必需的。然而,Java在默认情况下是包私有的(因此同一个包中的任何类都可以读取这些变量),而不是私有的;它工作正常-这样做我可以从Quad类和Hero类访问所有方法和变量-为什么?当然,如果我将hero声明为Quad(),那么当我创建对象时,将其创建为新的“hero”(也是Quad)-编译器肯定知道它是hero,也是Quad?如果不是,那么说“Quad hero=new hero()”有什么意义呢?我在Java代码中多次看到过类似的说法……困惑!!:-/@Zippy-假设你有一个
英雄
和一个
平民
,都是
四元组
的子类,你想要每个人的列表。然后,您可以创建一个
Quad
s列表,并将
Hero
s和
Commoner
s都放在该列表中,然后访问所有公共
Quad
变量和方法,而无需知道谁是谁。这就是多态性(不需要知道它们是什么子类才能访问共享行为)。@ianhanniballake如果Quad提供了可以重写的访问器,则类型不是问题。喜欢这个新节目吗?
hero.heroX