默认情况下,Object类是java中所有类的父类

时间:2016-11-29 22:35:01

标签: java

为什么引用类型对象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;


}
}

2 个答案:

答案 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
   }
}