日期:2014-05-20  浏览次数:20565 次

子类父类问题
情况是这样的。一个父类person 有字段String id,String name,int age 这三个字段。子类student继承了父类并多加了一个float score字段。也就是四个字段。


问题来了。一个student  的的四个属性都设了值,然后再强转成父类person类,那子类student的score字段是怎么处理的。因为我再强转回来score的值是存在的。

import java.util.*;

import com.wj.vo.Person;
import com.wj.vo.Student;
public class CaiYingBi{
public static void main(String args[]){
Student st=new Student("122", "12", 1222, (float)1.1); //子类
Person ps=(Person)st;//父类
Student  sst=(Student)ps;
System.out.println("id:"+sst.getId()+" name:"+sst.getName()+" age:"+sst.getAge()+" score:"+sst.getScore());
}
}


输出结果是得到的id:122 name:12 age:1222 score:1.1

------解决方案--------------------
个人理解,这个score不需要处理,他就在那。
楼主这句:Person ps=(Person)st;//父类
ps 是个父类的引用,通过ps只能使用父类定义的属性,而对于ps来说,score就不可见了
(但它并没有消失)。而如果楼主把st赋值给 Object 对象的引用: Object o =st;则对
于引用o 来说,连Person的三个属性也隐藏了。但这些属性还在那里,对引用st来说,都
可见。象楼主那样,不用st,而新定义一个Student对象的引用sst,把ps强转回Student,这
4个属性都是可见的。
这是java继承的特性。