A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 抽烟男孩 中级黑马   /  2013-4-1 22:30  /  1298 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 抽烟男孩 于 2013-4-2 08:54 编辑

关于对象的转化,总是把人糊涂。下面代码两个类,我想问为什么我想加的两句代码加不上?
还有结果调用的方法不一样?如果可以的话我想问Person goodboy= new Student()这句的goodboy对象时什么类?
内存为这个类分配的内存空间是Person类的大小还是Student的大小?
不好意,问题太多。
  1. class Person{
  2. int age ;
  3. String name;
  4. void say(){
  5. System.out.println("我的年龄是"+age+"我的名字是"+name);
  6. }
  7. }
  8. class Student extends Person{
  9. int age;
  10. String name;
  11. int score;
  12. void say(){
  13. System.out.println("我的年龄是"+age+"我的名字是"+name+"我的分数是"+score);
  14. }
  15. void Study(){
  16. System.out.println("我在学习");
  17. }
  18. }
  19. public class Test {
  20. public static void main(String[] args){
  21. Person man = new Person();
  22. man.age = 20;
  23. man.name = "张山";
  24. Person goodboy = new Student();
  25. goodboy.age = 22;
  26. goodboy.name = "李四";
  27. //goodboy.score =80;我想加这句话但是加上有问题;
  28. man.say();
  29. goodboy.say();
  30. //goodbay.Study();我想加这句话也有问题
  31. }
  32. }
复制代码
真{:soso_e166:}求解惑!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
Person goodboy= new Student(); 这句的goodboy对象是Person类所创建的对象;
内存为这个类分配的内存空间是Person类的,而new Student()是另外的一个对象。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Person goodboy = new Student();这里是多态的体现.在使用子父体系功能时,先参阅父类.父类有的才能被调用.
goodboy.score =80;
man.say();
goodboy.say();//这个功能没有.
oodbay.Study();//这个功能父中也没有.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
这是一个面向对象多态中的特点你也可以理解为注意事项,以下是我学习时做到比较,你先看一下再看一遍视频 毕老师基础教程第八天的内容,就懂了
多态特点(注意事项)
        在多态中非静态成员函数的特点:
        在编译时期:        参阅引用型变量所属的类中是否有调用的方法.如果有,编译通过,如果没有编译失败
        在运行时期:参阅对象所属的类中是否有调用的方法.
        总结:成员函数在多态调用时,编译看左边,运行看右边.
       
        在多态中,成员变量的特点:
        无论编译还是运行,都参考左边(引用型变量的类)
        在多态中静态成员函数的特点:
        无论编译还是运行,都参考左边(引用型变量的类)

楼主再复习一下毕老师基础教程第八天的内容,你的问题都会解开

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Person goodboy = new Student();这里是多态的体现.在使用子父体系功能时,先参阅父类.父类有的才能被调用.
goodboy.score =80;
man.say();
goodboy.say();//这个功能没有.
oodbay.Study();//这个功能父中也没有.
回复 使用道具 举报
若还有问题,继续追问; 没有的话,改成【已解决】哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马