黑马程序员技术交流社区

标题: 强制转换 [打印本页]

作者: 宋双    时间: 2012-1-13 21:51
标题: 强制转换
本帖最后由 宋双 于 2012-1-14 12:22 编辑

强制转换都可以应用在那些情况,只能将父类对象强制转换成子类对象嘛,还有别的情况吗?
作者: 张振宁    时间: 2012-1-13 23:53
数据类型的强制转换.
int a = (int)6.5l;
float b = (float)a;
或者定义一个obj类型的数组,存放对象,取出的时候强制转换成原来的原型。
Vector<Object> v = new Vector<Object>();
v.add(new Student());
v.add(new Teacher());
Student s = (Student)v.elementAt(0);
Teacher t = (Teacher)v.elementAt(1);
作者: 李建平    时间: 2012-1-14 10:00
子类对象是可以转换成父类对象的
父类对象要转换成子类对象就得具体分析了,因为子类对象一般都比父类对象多一些东西(参数或方法),如果直接强制转换Son son = (Son)father; 这样有时会出错,java有个instanceof 可以先对father 和 son 进行一个判断,if(father instaceof Son);如果返回true则些父类对象可以转换成子类对象,反之则不行
一般:Father father = new Father(); Son son = (Son)father;这样是会出错的;
   Father father = new Son();     Son son = (Son)father; 这种才不会出错;
作者: 李建平    时间: 2012-1-14 10:04

public class Test5 {
        public static void main(String[] args) {
                Person p = new Student("lisi");//此父类对象可以转换成子类对象
                Person p2 = new Person("zhaoliu");//此父类对象不可以转换成子类对象
                //System.out.println(p.getName());
                Student s = new Student("zhangsan","qinghe11zhong");
                //System.out.println(s.getName()+":"+s.getSchool());
                Person p3 = s;//子类对象可以转换成父类对象
               
       
                if(p instanceof Student){
                        Student s1 = (Student) p;
                        System.out.println("p可以转换成Student的对象");
                        }
                if(p2 instanceof Student){
                        Student s1 = (Student) p2;
                        System.out.println("p2可以转换成Student的对象");
                        }
        }
}

class Student extends Person{
        private String school;
        public Student(String name){
                this.setName(name);
        }
        public Student(String name,String school){
                this.setName(name);
                this.school = school;
        }
        public String getSchool(){
                return school;
        }
}
class Person {
        private String name;
        public Person(){}
        public Person(String name){
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        public void setName(String name){
                this.name = name;
        }
}

作者: 李建平    时间: 2012-1-14 10:07
子类强制转换为父类对象时,并没有实际丢失它原有内存空间(比父类多的那些部分)只是暂时不可访问。所以还能再转回来。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2