【问题标题】:Java Sub Classing: Overriding and Making New MethodsJava 子类化:覆盖和创建新方法
【发布时间】:2019-10-01 20:57:18
【问题描述】:

关于是否可以同时覆盖父类的方法并同时从子类中创建新方法的问题,教 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 抛出“找不到符号”错误。有什么我想念的吗?一个人不能同时做这两件事,但我似乎无法逃脱这个错误,这似乎很奇怪。

【问题讨论】:

  • 这些类是否定义在两个单独的文件中?

标签: java overriding extend subclassing


【解决方案1】:

如果您有一个对象的引用,其中变量被定义为ABC,那么您只能调用在类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();
}

【讨论】:

  • 太棒了,谢谢!!我被挂断了一段时间!
【解决方案2】:

这里 ABC 是超类,DEF 是子类。 因此,当您执行 ABC obj2 = new DEF(); 时,obj2 只能访问那些在 ABC 中定义的函数。由于newMethod()在ABC中没有定义,所以不能用obj2来调用。

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2012-10-12
    • 1970-01-01
    • 2010-09-06
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多