黑马程序员技术交流社区
标题:
这段代码什么意思啊
[打印本页]
作者:
陈世涛
时间:
2012-7-16 19:39
标题:
这段代码什么意思啊
undergraduatestudent s1=new undergraduatestudent();
graduate s2=new graduate();
Student x;
x=s1;
graduate s3=new graduate;
if(x instanceof Graduate)//检查x是不是Graduate的实例
s3=(graduate)x;
对象之间怎么能用等号啊?
于java语言的多态性使得可以用一个子类的实例赋值给一个
父类的变量
这句话什么意思啊
作者:
黑马振鹏
时间:
2012-7-16 19:48
graduate s3=new graduate; ?
你把代码贴全。
作者:
游兴钟
时间:
2012-7-16 19:57
s3=(graduate)x; 这句话做了两件事 首先将x强转为graduate类型 然后对象x的地址值赋值给对象s3 s3的引用指向了对象x
=代表着赋值,对象的引用也可以进行赋值啊
至于第二问 举个例子List list =new ArrayList();这是一个面向父类编程 其中变量list就是指向了自己的子类实例对象new ArrayList();
作者:
张_涛
时间:
2012-7-16 20:02
s3=(graduate)x;
这是赋值,不是等号吧?意思就是将x所引用的对象强转为graduate类型赋值给s3变量
java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量
意思就是,动物是父类,猫和狗是子类,因此猫和狗是动物,所有可以将猫的对象赋给动物类型的变量
编程中,所有的对象都可以赋值给Object。
作者:
陈冲
时间:
2012-7-16 20:05
undergraduatestudent s1=new undergraduatestudent();
graduate s2=new graduate();
Student x;
x=s1; //向上转型,父类通过子类对象时实例化
graduate s3=new graduate;
if(x instanceof Graduate)//检查x是不是Graduate的实例
s3=(graduate)x;//向下转型
复制代码
通过你的代码可以看出Student是父类,undergraduatestudent和Graduate是子类;
关于你的问题:
对象之间怎么能用等号啊?
那是因为在类的多太重有
向上转型和向下转型
的用法;
向上转型:父类对象通过子类对象去实例化,实际上就是对象的向上转型。向上转型不需要进行强制类型转换,但是向上转型会丢失精度;
你的代码中的 x=s1 就是向上转型;
向下转型:父类的对象可以转换为子类对象,但是需要注意的是,这时必须进行强制的类型转换;
你的代码中 s3=(graduate)x 就是向下转型;
不过以后代码要贴全啊,,,这样让人自己去分析你代码的功能很麻烦,,,还有你那个类到底是Graduate还是graduate?编译的时候没有报错?
作者:
周磊
时间:
2012-7-16 20:08
对象之间怎么能用等号啊? 关于你的这个问题,要从JAVA的底层的理解出发,JAVA,是一门“看似”没有指针的语言,其实从底层来看,JAVA的几乎所有都是指针,这样也就能理解,为什么对象之间可以用等号,因为每个对像实际上就对内存的索引!
对于你的第二个问题,何如,B(类) 继承 A(类)
那 B类的一个对象b(B b = new B();),可以赋值A类的对象(A a = b;)从底层来说,由于B继承了A,所以在构造b时,实现上是先构造A类的相关属性,再构造B类的相关属性,所以对象b包含了A类的所有属性(除构造方法),所以可以把B类对象b赋值给它的父类A的变量
作者:
乞文超
时间:
2012-7-16 21:15
x=s1是把s1的引用传给x,s3=new graduate();
作者:
党巾水
时间:
2012-7-17 13:41
if(x instanceof Graduate)//检查x是不是Graduate的实例
s3=(graduate)x;
如果x是Graduate的实例,就把x转成graduate类型,并把这个对象的引用传递给s3.
作者:
张世威
时间:
2012-7-17 14:22
本帖最后由 张世威 于 2012-7-17 14:29 编辑
1、 s3=(graduate)x;实际上不叫对象赋值,而是叫对象引用赋值,就是把x指向对象的地址存放到s3中
如下图:
对象引用赋值.jpg
(60.64 KB, 下载次数: 56)
下载附件
2012-7-17 14:22 上传
2、为什么子类可以赋给父类:因为子类继承自父类,子类可被我们调用的方法>=父类的,
这样看来,子类包含了父类。
①比如说父类有:a、b、c三个可调方法
子类有: a、b、c 、d1、四个可调用方法
②子类赋给父类,父类调用abc,在子类中都可以调到
3、汽车和小轿车:可以说小轿车是汽车,能说汽车是小轿车吗???
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2