试图理解java中的类继承

让我说我有超级班

public class SuperSub {
  public void overideThisMethod(){
    System.out.println("Printed from Superclass");
  }
}

我有一个像这样的子类,

public class SubClass2 extends SuperSub { 
  @Override
  public void overideThisMethod(){
    System.out.println("from subclass2");
  }
  public static void main(String[] args){
    SubClass2 subClass2= new SubClass2();
    subClass2.overideThisMethod();
    SuperSub superSub = new SuperSub();
    superSub.overideThisMethod();
  }
}

我从运行程序时得到输出

run:
from subclass2
Printed from Superclass

输出不应该是,

run:
from subclass2
from subclass2

非常感谢任何澄清,谢谢!

解决方法

扩展(也称为继承)不会修改超类,但实际上会创建一个带有您定义的扩展的新类,例如覆盖它.

因此,两个类都存在,每个类都有自己的逻辑.

在这里,您正在创建一个名为SuperSub的类,它打印“从超类打印”.然后你使用它作为基础创建另一个类SubClass2,它“掩盖”(a.k.a.覆盖)基本行为,在这种情况下通过打印“from subclass2”而不是.

这样,如果你创建一个类SuperSub的对象,它仍然会表现为SuperSub.分别如果你创建了一个SubClass2类的对象,它的行为就像SuperSub一样,你在SubClass2中定义了“扩展”(在这种情况下是被覆盖的行为).

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...