当前位置: 首页 > 知识库问答 >
问题:

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

韦澄邈
2023-03-14

为什么引用类型对象o无法访问变量a。它显示错误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个答案

郎泰平
2023-03-14

在Java中,不能仅仅通过分配字段来创建字段。您还必须在代码中声明它们:

public class test2 {
    int a;
    ...
}

即使如此,如果您将一个变量声明为一个对象,这实际上是一个“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,它只需要使用声明的类来确定哪些字段和方法是可访问的。

缑永年
2023-03-14

基本上,您混淆了引用类型和实例(对象)类型。

在您的程序中,o是类型为Object的参考变量,因此o将只能访问Object类中的方法和变量。另外,t是类型为test2的参考变量,因此t可以访问test2的类成员。你可以在这里查看更多细节。

简而言之,引用类型决定您可以访问类的哪些成员。

此外,请查看以下流行的继承类,以了解上述概念:

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
   }
}
 类似资料:
  • 问题内容: 在Java中,默认情况下所有类都扩展了任何默认类吗? 示例:如果我有一个简单的课程,例如: 此类默认情况下是否扩展了类? 问题答案: class是所有类的超类。 类对象是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现此类的方法。 您可以测试一下:

  • 我正在使用一个PHP库将一个文件上传到我的bucket中。我已经将ACL设置为public read write,它可以正常工作,但文件仍然是私有的。 我发现如果我把被授权人改成所有人,文件就会公开。我想知道的是,如何将bucket中所有对象的默认grante设置为“Everyone”。或者有没有另一种默认公开文件的解决方案? 我使用的代码如下:

  • 问题内容: 第二个命令是否将当前路径添加为另一个搜索路径? 用冒号分隔多个路径是否正确? 默认情况下,当前路径不是始终在ClassPath中,因此不需要显式指定吗? 谢谢。 问题答案: 从Oracle的页面上设置类路径: 默认的类路径是当前目录。设置CLASSPATH变量或使用命令行选项将 覆盖 默认值,因此,如果要在搜索路径中包括当前目录,则必须包括“。”。在新设置中。 使用了Windows和类

  • F-代数是用一个内函子描述的,内函子的函数是:F a->a,如果你把F a看作一个表达式,把a看作求这个表达式的结果,这是有意义的,正如链接的文章所解释的那样。 作为F-代数的对偶,F-余代数对应的函数为a->F a。维基百科说F-余代数可以用来创建无限的、懒惰的数据结构。a->F functon如何允许创建无限的、懒惰的数据结构?此外,考虑到这一点,由于Haskell是它的核心lazy,那么Ha

  • 问题内容: 我有一个称为Product的类和一些扩展它的子类。现在在我的注释中,我有很多类型,例如: 然后定义我的Product类。我想做的是,如果Jackson无法检测到该字段不符合任何这些结构,则返回 未知产品 我该如何使用Jackson @Type注释呢?它应该像是在名称中插入空白或在我实际上不知道的值中添加一些标志(我尝试创建扩展Product的UnknownProduct,并且在名称值中

  • 问题内容: 如果我写这样的话 哪种类型带有“ 18”?是 int 还是 byte ?还是还没有类型? 它不能是int,因为这样是正确的: 这是不正确的: 编辑:我想我在工作分配转换的规范中找到了正确的部分: 常量的编译时缩小意味着代码如下: 字节theAnswer = 42; 被允许。如果不进行缩小,则整数文字42具有int类型的事实意味着将需要强制转换为字节: 字节theAnswer =(字节)