如果c
是一个ChildClass
对象那么为什么它不能调用ChildClass
的方法?
喜欢:
ParentClass c=new ChildClass(); //Here ChildClass extends ParentClass
特别是:
Object s=new StringBuffer();
这里s
是StringBuffer
的对象,但是s.append(null)
是编译时错误。为什么会这样?
最佳答案
编译器的工作是确保您不会调用任何与您调用它的变量不匹配的方法。为了帮助编译器完成此操作,我们为所有变量赋予一个“类型”。类型可以是原始类型(如“int”),也可以是类、枚举或接口(interface)。如果它是一个类、一个接口(interface)或一个枚举;那么编译器将允许您在该变量上使用该类、接口(interface)或枚举中列出的方法。
变量的“类型”不一定与变量引用的对象的“类”相同。在您的示例中,类型是 Object
,但类是 StringBuffer
。但是编译器用来检查方法调用是否正确的是类型,而不是类;因为编译器不能知道您可能使用变量引用的每个对象的类。
如果语言不以这种方式工作,那么具有类型的变量就没有任何意义。这就是 Javascript 的工作方式 - 所有内容都被声明为 var
并且没有真正的类型系统。当我们说 Java 是“静态类型”时,我们的意思是我们必须为变量指定类型,这样做可以帮助编译器保护我们免遭误用变量。
关于java - 子类的对象不能调用自己的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696612/