java中的关键字extends是否仅在创建父类实例时才要求派生类继承属性?

java中的关键字extends是否仅在创建父类实例时才要求派生类继承属性?,java,Java,如果我有类A和类B扩展了类A。当ClassB试图访问ClassA的属性、方法等时,是否会自动创建ClassA实例 如果是这样的话,如果ClassA是一个抽象类会发生什么?我们不能手动创建抽象类的实例,但是JVM如何处理这种情况,或者ClassB如何在没有ClassA实例的情况下访问ClassA的成员(因为它是一个抽象类而创建)没有ClassB,ClassA就无法独立存在。必须通过新运算符创建类的实例。要获取B的实例,必须在系统中的某个位置调用,如: new ClassB(); 如果只有以下呼叫

如果我有类A和类B扩展了类A。当ClassB试图访问ClassA的属性、方法等时,是否会自动创建ClassA实例


如果是这样的话,如果ClassA是一个抽象类会发生什么?我们不能手动创建抽象类的实例,但是JVM如何处理这种情况,或者ClassB如何在没有ClassA实例的情况下访问ClassA的成员(因为它是一个抽象类而创建)

没有ClassB,ClassA就无法独立存在。必须通过新运算符创建类的实例。要获取B的实例,必须在系统中的某个位置调用,如:

new ClassB();
如果只有以下呼叫:

new ClassA();
那么B的实例就不存在了,所以类B中的任何东西(除了静态方法)都是无关的。为了简单起见,我忽略了通过反射创建新实例

继承从父级向下流到子级,因此子级可以访问父级上的public、protected或package private方法(取决于声明的ClassA和ClassB包);但是父级无法访问子级上的方法。但是,通过多态性,子对象上的方法可以优先于父对象上的方法执行


我认为您应该阅读一些。

当一个类在Java中扩展了另一个类,然后被实例化时,只有一个对象被创建,并且该对象具有合法允许继承的父类类型的所有方法和变量。您不必同时实例化这两个对象。另一种说法是:

假设你有A级:

public class ClassA{
  public int var1
  private int var2

  public void method1(){...}
  private void method2(){...}
}
B类:

public class ClassB extends ClassA{
  public int newVar1

  public void newMethod1(){...}
}
实际上,B类实际上是这样的:

public class ClassB extends ClassA{
  public int var1
  public int newVar1

  public void method1(){...}
  public void newMethod1(){...}
}

我有一个B扩展了A,每当你创建一个B,B就是A,所以A存在。它并不是作为一个单独的对象存在的,B是a,所以B拥有a所拥有的一切。A可以在没有B的情况下存在


如果是抽象的,则不能创建为。创建B时,它具有A的所有属性/方法,因为它是A。

它是向后的。ClassB是ClassA,如果B存在,它就是a,因此隐式存在。A可以在没有B的情况下存在。因为B扩展了A。也许本文将回答您的问题: