黑马程序员技术交流社区
标题:
类的Extends之间的上下转化
[打印本页]
作者:
抽烟男孩
时间:
2013-4-1 22:30
标题:
类的Extends之间的上下转化
本帖最后由 抽烟男孩 于 2013-4-2 08:54 编辑
关于对象的转化,总是把人糊涂。下面代码两个类,我想问为什么我想加的两句代码加不上?
还有结果调用的方法不一样?如果可以的话我想问Person goodboy= new Student()这句的goodboy对象时什么类?
内存为这个类分配的内存空间是Person类的大小还是Student的大小?
不好意,问题太多。
class Person{
int age ;
String name;
void say(){
System.out.println("我的年龄是"+age+"我的名字是"+name);
}
}
class Student extends Person{
int age;
String name;
int score;
void say(){
System.out.println("我的年龄是"+age+"我的名字是"+name+"我的分数是"+score);
}
void Study(){
System.out.println("我在学习");
}
}
public class Test {
public static void main(String[] args){
Person man = new Person();
man.age = 20;
man.name = "张山";
Person goodboy = new Student();
goodboy.age = 22;
goodboy.name = "李四";
//goodboy.score =80;我想加这句话但是加上有问题;
man.say();
goodboy.say();
//goodbay.Study();我想加这句话也有问题
}
}
复制代码
真{:soso_e166:}求解惑!!!
作者:
张昶
时间:
2013-4-1 22:50
Person goodboy= new Student(); 这句的goodboy对象是Person类所创建的对象;
内存为这个类分配的内存空间是Person类的,而new Student()是另外的一个对象。
作者:
HM何伟
时间:
2013-4-1 22:55
Person goodboy = new Student();这里是多态的体现.在使用子父体系功能时,先参阅父类.父类有的才能被调用.
goodboy.score =80;
man.say();
goodboy.say();//这个功能没有.
oodbay.Study();//这个功能父中也没有.
作者:
董霁辉
时间:
2013-4-1 22:55
这是一个面向对象多态中的特点你也可以理解为注意事项,以下是我学习时做到比较,你先看一下再看一遍视频 毕老师基础教程第八天的内容,就懂了
多态特点(注意事项)
在多态中非静态成员函数的特点:
在编译时期: 参阅引用型变量所属的类中是否有调用的方法.如果有,编译通过,如果没有编译失败
在运行时期:参阅对象所属的类中是否有调用的方法.
总结:成员函数在多态调用时,编译看左边,运行看右边.
在多态中,成员变量的特点:
无论编译还是运行,都参考左边(引用型变量的类)
在多态中静态成员函数的特点:
无论编译还是运行,都参考左边(引用型变量的类)
楼主再复习一下毕老师基础教程第八天的内容,你的问题都会解开
作者:
HM何伟
时间:
2013-4-1 22:55
Person goodboy = new Student();这里是多态的体现.在使用子父体系功能时,先参阅父类.父类有的才能被调用.
goodboy.score =80;
man.say();
goodboy.say();//这个功能没有.
oodbay.Study();//这个功能父中也没有.
作者:
陈丽莉
时间:
2013-4-1 23:12
若还有问题,继续追问; 没有的话,改成【已解决】哦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2