- <font size="1">class Person
- {
- String name;
- Person(String name)
- {
- this.name = name;
- }
- //...
- }
- //定义一个子类Student
- class Student extends Person
- {
- String name;
- private int id;
- Student(String name,int id)
- {
- super(name);
- this.id = id;
- }
- public int getId()
- {
- return id;
- }
- public void setId(int id)
- {
- this.id = id;
- }
- }
- class DuotaiDemo
- {
- public static void main(String[] args)
- {
- //第一个
- Person p = new Person("小明");
- p = null;
- System.out.println(p);
- //----------------------
- //第二个
- //Person变量可以引用Person的对象,也可以引用它的子类对象
- Student stu = new Student("大明",0001);
- Person[] per = new Person[10];
- per[0] = stu;
- //第三个
- Student[] student = new Student[2];
- //将student转换成Person[]是合法的
- Person[] person = student;
- person[0] = new Person("小黑");//给person[0]赋Person类型的值
- student[0].setId(0002);
- System.out.println(student[0].name + "的id是" + student[0].getId());
- }
- }</font>
复制代码 对于第一个:
将p = null,是p不再指向new出的“小明”这个对象了呢?还是说new出的这个“小明”也随之在内存中消亡了呢?还是说要等内存自动在某个时候消亡呢?
对于第二个:
我们说多态是表示事物的多种形态,那么,这里的多种形态,是不是不能同时具备呢?
上面的代码中,per[0] = stu后,它们引用的是同一个对象,是("大明",0001)这个对象,那么是不是Per[0]就不在指向new Person[10]其中的第一个对象(虽然为null)了呢?
对于第三个:
Person[] person = student;这个语句中,应该是指向的同一个类型的数组(应该是Person[]这个数组吧?),那么现在,student是Student[]数组的类型呢?还是Person[]数组的类型呢?
1、如果是Student[]数组的类型,那么下面的student[0].setId(0002);这个方法是没错的,但是就不是和Person[0]指向相同数组了,
是不是这时候已经将Person[] person = student;这句的行为覆盖掉了呢?
2、如果是Person[]数组的类型,那么下面的student[0].setId(0002);这个方法是不成立的,因为编译时虽然可以通过,但是运行后会报错,如下:
希望大家能帮忙解答清晰。
|
|