为什么引用类型对象o无法访问变量a。它显示无法解决的错误或不是字段。
public class test2 {
int a;
public static void main(String args[]) {
Object o = new test2();
test2 t = new test2();
t.a = 0;
o.a = 10;
}
}
答案 0 :(得分:0)
在Java中,您无法仅通过分配字段来创建字段。您还必须在代码中声明它们:
public class test2 {
int a;
...
}
即使这样,如果你将一个变量声明为一个Object,那实际上是一个“test2”实例,你仍然无法在不先抛出它的情况下访问字段'a'。
Object o = new test2();
o.a = 5 // compile error
test2 t = (test2)o;
t.a = 5 // ok. Will compile fine
Java编译器使事情保持相当简单,这意味着它不会很难看到“o”是否真的是test2,它只是使用声明的类来确定哪些字段和方法是可访问的。
答案 1 :(得分:0)
基本上,您在引用类型和实例(对象)类型之间感到困惑。
在您的计划中,o
是类型为Object
的引用变量,因此o
将只能访问Object
类中的方法和变量。
此外,t
是类型为test2
的引用变量,因此t
可以访问test2
的类成员。您可以查看here了解更多详情。
简而言之,引用类型决定了您可以访问的类的成员。
另外,请查看下面流行的继承类来理解上述概念:
public class Animal {
public String foodtype;
//other members
}
public class Dog extends Animal {
public String name;
//other members
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();//'a' can access Anmial class members only
a.foodtype = "meat"; //ok
a.name = "puppy"; //compiler error
Dog d = new Dog();//'d' can access both Animal and Dog class members
d.foodtype = "meat"; //ok
d.name = "puppy";//ok
}
}