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