class Person{}
class Student extends Person{}
public class Test {
    public static void main(String[] args) {
        //这是一个父类引用指向子类对象
        Person p=new Student();
        int b=0;
        //这是一个double类型里面放int
        double i=b;
        //Student继承了Person的非私有成员并能扩展。那就说明Student所占的空间可能要比Person大
        //那为什么p指向Student对象为什么不是强转?不是很懂这个原理
        //不应该是小的转大的就自动转,大的转小的就强转么
        //比如 int 转 double
        //一直想不明白多态的内部是如何实现的,求大神解答一下他是怎么运作的
    }
}

解决方案 »

  1.   

    只能子类(对象实际类型)强转成父类,父类(对象实际类型)强转不了子类从逻辑上讲,学生是人的子集,所以学生可以转成人,但人是学生的超集,人也可以是老师,是家长或者其他,所以人强转成学生就是有问题的这个强转的"强"字容易让人误解,而且Person p=new Student();这个对象实际的类型并非Person,而是Student
      

  2.   

    int 转 double,并非多态,这个只是精度上的转换罢了int 和double是基本数据类型,跟类型完全不是一个东西,也不存在父类子类多态的概念你搞混淆了
      

  3.   

    class Person{
    //int b=0;
    }
    class Student extends Person{}
    class Student2 extends Person{}
    public class Test3 {
        public static void main(String[] args) {
            //这是一个父类引用指向子类对象
            Person p=new Student();
            int b=0; //person的变量放在person类里面
            //这是一个double类型里面放int
            double i=b;
            //Student继承了Person的非私有成员并能扩展。那就说明Student所占的空间可能要比Person大
            //那为什么p指向Student对象为什么不是强转?不是很懂这个原理
            Student s = (Student) p;//强转,--父类和子类当然是父类大了,子类来源于父类,子类转换成父类直接转,父类有很多子类,转换成其中一个子类,要强制转
            //不应该是小的转大的就自动转,大的转小的就强转么
            //比如 int 转 double
            
            Person p2=new Student();//Person有两个子类
            Student2 s2 = (Student2) p;//强转不合理的话会出现异常的        //一直想不明白多态的内部是如何实现的,求大神解答一下他是怎么运作的
        }
    }
      

  4.   

    Person p = new Studen()这是对象向上转型,代表子类的实例化引用给父类声明的对象,至于为什么你不需要了解,这就是一个概念性的问题,因为不这样搞后面会出现很多麻烦,而且这样结构会比较清楚,就打个很简单比方,有个Student类  有个Teacher类  有个Worker类,他们都继承Person类,那么如果有这么一个方法 smile  里面要传个参数代表所有的人,那么Student是人  Teacher是人  Worker也是人,他们都能笑,那么怎么设置这个参数呢?当然是Person,但是他的子类也能传进去,为什么?  就是因为对象向上转型,如果你实在不懂就去多看看视频,光看抽象的代码你很难理解
      

  5.   

    Person p = new Student(); 的意思是,有个学生在人群中,而人群是基类,你可以说学生是人,但不能反过来说人是学生;所以你做了这个申明后,一旦调用到p这个实例对象,就会自动转成Student类处理,实现的原理就这样,理解到人的编程思想就可以了,有必要再去看实现。
      

  6.   

    对于short,int,long,double这样的基本数据类型,你就当是每个人手里的纸条,纸条有大小。
                 你纸条比别人大,你抄他的东西肯定能抄完整;
                 你纸条比别人小就可能抄不下,这时候强制类型转换的意思就是抄不下的就不要了。但对于对象来说就不一样了,拿学校来说
    学校里很多人,有老师,学生,有男学生,男老师是男人;女老师,女学生是女人;
    校长喊来个人帮我抬下桌子,来了个女学生,这个反馈没有错,这个女学生也是一个人
    妹子抬不动桌子,校长改口,来个男人帮我抬下桌子,这时候来了个男的体育老师,轻松搞定。
    如果校长指明要英语系的女学生,那这个体育老师就只能一边去了