本帖最后由 黄玉昆 于 2013-2-5 19:31 编辑
在毕老师的视频讲解中,说道关于抽象类在创建对象上的问题:抽象类不可用new创建对象,因为调用抽象方法没有意义(抽象方法为类中成员)。看下面一段代码:- <font size="1">/*
- 问题:关于抽象类不能创建对象,但能创建数组的测试
- */
- //抽象类Person
- abstract class Person
- {
- private String name;
- public Person(String name)
- {
- this.name = name;
- }
- //抽象方法:对人的描述,但对每种人的描述是不清楚的,所以用抽象方法
- public abstract String getDescription();
- public String getName()
- {
- return name;
- }
- }</font>
- <font size="1">
- //Student继承父类Person
- class Student extends Person
- {
- public Student(String name)
- {
- super(name);
- }
- //复写超类的抽象方法,对学生进行具体描述
- public String getDescription()
- {
- return "I'm a student.";
- }
- }
- //Worker继承父类Person
- class Worker extends Person
- {
- public Worker(String name)
- {
- super(name);
- }
- //复写超类的抽象方法,对工人进行具体描述
- public String getDescription()
- {
- return "I'm a worker.";
- }
- }
- //测试
- class PersonText
- {
- public static void main(String[] args)
- {
- Person[] p = new Person[2];//用抽象类创建数组
- //再创建两个对象
- p[0] = new Student("Sun");
- p[1] = new Worker("Wu");
- System.out.println(p[0].getName() + ":" + p[0].getDescription());
- System.out.println(p[1].getName() + ":" + p[1].getDescription());
- }
- }</font>
复制代码 数组也是对象,只不过有些特殊而已,既然有new存在,就说明在内存中创建了对象,为其开辟了一片空间,但是抽象类不能实例化。那么new出来的Person数组放在哪了呢?内存中又是怎么分配的呢?
是不是说抽象类不可以创建对象,但是又可以创建数组,就有些矛盾呢?
求解答,最好有图并分好步骤的解释,谢谢。
|