Java 区别于;实例化";及;“子类”;

Java 区别于;实例化";及;“子类”;,java,Java,我在读Java教程,它说: 抽象类不能实例化,但可以子类化 这是什么意思?我认为必须实例化才能创建子类?这句话真的把我弄糊涂了,非常感谢您的帮助。举例说明: AbstractClass a = new AbstractClass(); //illegal 子类: class ConcreteClass extends AbstractClass { ... } ConcreteClass c = new ConcreteClass(); //legal 您必须创建一个扩展抽象类的新类,实现所

我在读Java教程,它说:

抽象类不能实例化,但可以子类化

这是什么意思?我认为必须实例化才能创建子类?这句话真的把我弄糊涂了,非常感谢您的帮助。

举例说明:

AbstractClass a = new AbstractClass(); //illegal
子类:

class ConcreteClass extends AbstractClass { ... }
ConcreteClass c = new ConcreteClass(); //legal
您必须创建一个扩展抽象类的新类,实现所有抽象方法,然后使用该新类

请注意,您也可以这样做:

class ConcreteClass extends AbstractClass { ... }
AbstractClass a = new ConcreteClass(); //legal

当您说实例化时,它意味着您希望创建类的对象。子类是继承的子类。 比如说,

abstract class A{
  //Class A is abstract hence, can not be instantiated. The reason being abstract class provides the layout of how the concrete sub-class should behave. 

   pubic abstract void doSomething();
   //This abstract method doSomething is required to be implemented via all the sub-classes. The sub-class B and C implement this method as required.

}

class B extends A{
   //Class B is subclass of A
  public void doSomething(){ System.out.println("I am class B"); }
}
class C extends A{
   //Class C is subclass of A
  public void doSomething(){ System.out.println("I am class C"); }
}

if you try to do this, it would generate an exception

A a = new A();

But this would work fine.
B b = new B();
or 
A a = new B(); //Note you are not instantiating A, here class A variable is referencing the instance of class B 

子类可以获得其父类拥有的所有属性/方法,而实例化类是在内存中创建该父类的实例时实现的。

很好,您已经重申了作者的问题。但是为了提供理解,您必须解释为什么您允许实例化ConcreteClass而不是AbstractClass。您甚至可以使用来实例化抽象类(在幕后,您正在创建抽象类的匿名子类)。@AlexLynch:看起来很奇怪,有一类问题,澄清重述才是真正的答案@托曼德森虽然是真的,但我不认为这一重述/澄清提供了对原始问题的实际答案。OP以外的人可能会读到这篇文章,希望得到一个彻底的答案。@AlexLynch,他的问题是“实例化/子类意味着什么。”我回答了。。。