Java 子类:覆盖和创建新方法
Java Sub Classing: Overriding and Making New Methods
关于是否可以覆盖父 class 的方法并从子 class 中创建新方法,教授 Java 的资源似乎有相互矛盾的答案同时。当我尝试以下操作时:
class ABC{
//Overridden Method
public void disp(){
System.out.println("disp() method of parent");
}
}
class DEF extends ABC{
//Overriding Method
public void disp(){
System.out.println("disp() method of child");
}
//new method in the subclass
public void newMethod(){
System.out.println("new method of child class");
}
public static void main(String args[]){
ABC obj = new ABC();
obj.disp();
ABC obj2 = new DEF();
obj2.disp();
obj2.newMethod();
}
}
java 抛出 "cannot find symbol" 错误。有什么我想念的吗?一个人不能同时做这两件事似乎很奇怪,但我似乎无法避免这个错误。
如果您有一个对象的引用,其中 变量被定义为 为 ABC
,那么您只能调用在 [=40] 上定义的方法=] ABC
。即使底层对象是 DEF
类型,变量本身也被定义为保存 ABC
.
尝试更改您的代码:
ABC obj2 = new DEF();
对此:
DEF obj2 = new DEF();
它将起作用,因为您将 obj2
定义为 DEF
.
类型
这是另一个显示字符串创建的示例,首先是为类型 String
定义的变量,另一个是为 Object
.
定义的类型
String s = new String();
s.charAt(99); <-- this is valid on a String
Object o = new String();
o.charAt(99); <-- same thing, but not allowed on Object
一个解决方法是使用 instanceof
检查 obj2
是否实际上是 DEF
的一个实例,如果是,暂时像 DEF
一样使用它铸造它,像这样:
if (obj2 instanceof DEF) {
((DEF) obj2).newMethod();
}
这里ABC是超类,DEF是子类。
因此,当您执行 ABC obj2 = new DEF();
时,obj2 只能访问 ABC 中定义的那些函数。由于 newMethod()
没有在 ABC 中定义,所以不能使用 obj2.
来调用它
关于是否可以覆盖父 class 的方法并从子 class 中创建新方法,教授 Java 的资源似乎有相互矛盾的答案同时。当我尝试以下操作时:
class ABC{
//Overridden Method
public void disp(){
System.out.println("disp() method of parent");
}
}
class DEF extends ABC{
//Overriding Method
public void disp(){
System.out.println("disp() method of child");
}
//new method in the subclass
public void newMethod(){
System.out.println("new method of child class");
}
public static void main(String args[]){
ABC obj = new ABC();
obj.disp();
ABC obj2 = new DEF();
obj2.disp();
obj2.newMethod();
}
}
java 抛出 "cannot find symbol" 错误。有什么我想念的吗?一个人不能同时做这两件事似乎很奇怪,但我似乎无法避免这个错误。
如果您有一个对象的引用,其中 变量被定义为 为 ABC
,那么您只能调用在 [=40] 上定义的方法=] ABC
。即使底层对象是 DEF
类型,变量本身也被定义为保存 ABC
.
尝试更改您的代码:
ABC obj2 = new DEF();
对此:
DEF obj2 = new DEF();
它将起作用,因为您将 obj2
定义为 DEF
.
这是另一个显示字符串创建的示例,首先是为类型 String
定义的变量,另一个是为 Object
.
String s = new String();
s.charAt(99); <-- this is valid on a String
Object o = new String();
o.charAt(99); <-- same thing, but not allowed on Object
一个解决方法是使用 instanceof
检查 obj2
是否实际上是 DEF
的一个实例,如果是,暂时像 DEF
一样使用它铸造它,像这样:
if (obj2 instanceof DEF) {
((DEF) obj2).newMethod();
}
这里ABC是超类,DEF是子类。
因此,当您执行 ABC obj2 = new DEF();
时,obj2 只能访问 ABC 中定义的那些函数。由于 newMethod()
没有在 ABC 中定义,所以不能使用 obj2.