首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于java中对象的转型有关问题

2012-01-11 
关于java中对象的转型问题一个java关于对象转型的问题,请高手们帮忙解答下啦!代码如下:为什么注释的哪行有

关于java中对象的转型问题
一个java关于对象转型的问题,请高手们帮忙解答下啦!代码如下:为什么注释的哪行有问题,p这个引用变量指向了Student这个实例,那不是应该有了Student类里面的school这个变量么??而p.say()为什么执行的时Student里面的say()方法呢?是不是因为内存分配的问题。
class Person 
{
String name;
void say(){System.out.println("peron");};
}
class Student extends Person
{
String school="gdpu";
void say(){System.out.println("student");}
public static void main(String[] args) 
{
Person p = new Student();
p.name="hh";
Student s=(Student)p;
//System.out.println(p.school);
System.out.println(s.school);
p.say();
}
};

[解决办法]
问题在于p声明为了Person,而Person没有school这个方法
[解决办法]
LZ找些资料好好看看方法重写和多态吧
Student类重写父类的方法
Person p = new Student(); //p指向Student类的实例
方法是动态绑定的,指向什么实例就调用什么实例的重写过的方法,也就是方法调用的时候,会先从虚拟表V-Table查找方法的地址,再调用方法,p指向Student的实例,从V-Table中找到了Student的方法
[解决办法]
属性是静态绑定的,也就是编译期决定的
p是Person类,没有school属性,所以静态绑定失败

热点排行