当前位置: 技术问答>java相关
简单问题简单问题简单问题简单问题
来源: 互联网 发布时间:2015-02-21
本文导语: class Father { int var1=10; void amethod() { System.out.println("father method "); } } class Son extends Father { int var1=20; void amethod() { System.out.println("father is over ridden "); } public void bmethod()...
class Father {
int var1=10;
void amethod() {
System.out.println("father method ");
}
}
class Son extends Father {
int var1=20;
void amethod() {
System.out.println("father is over ridden ");
}
public void bmethod() {
System.out.println("son's method ");
}
public static void main(String as[]) {
Father f=new Son();
System.out.println(f.var1);
f.bmethod();
f.amethod();
}
}
f.bmethod();为什么出错???
int var1=10;
void amethod() {
System.out.println("father method ");
}
}
class Son extends Father {
int var1=20;
void amethod() {
System.out.println("father is over ridden ");
}
public void bmethod() {
System.out.println("son's method ");
}
public static void main(String as[]) {
Father f=new Son();
System.out.println(f.var1);
f.bmethod();
f.amethod();
}
}
f.bmethod();为什么出错???
|
你说的这个问题是一个非常典型的问题,在c++/java学习中能提到这样的问题,学习应该很是深入的。同时也说明java不过是c++的边缘副产品。好了,不说废话,说正题:
(1)java中没有指针概念的。他只有相当于(注意是相当于)c++的引用概念。
(2)java中只有虚拟函数的概念。
(3)开始说明了:
Father f=new Son();
便于说明改成:Son son=new Son(); Father f=son;
实际上son和f虽然指向的地址是一样的。但是他们管辖的地址空间(就是可以理解为地址的数量)是不同的。son 比f要多的。你有了虚拟函数的概念就知道。实际上f的地址空间没有包括
public void bmethod() 的.
也就是方法虽然存在,但是f却被限制不能管理到那里的空间。所以就出现你的那种情况。
不过你可以象这样使用:
(Son)f.method();
(1)java中没有指针概念的。他只有相当于(注意是相当于)c++的引用概念。
(2)java中只有虚拟函数的概念。
(3)开始说明了:
Father f=new Son();
便于说明改成:Son son=new Son(); Father f=son;
实际上son和f虽然指向的地址是一样的。但是他们管辖的地址空间(就是可以理解为地址的数量)是不同的。son 比f要多的。你有了虚拟函数的概念就知道。实际上f的地址空间没有包括
public void bmethod() 的.
也就是方法虽然存在,但是f却被限制不能管理到那里的空间。所以就出现你的那种情况。
不过你可以象这样使用:
(Son)f.method();
|
f 是个father,而father中没有bmethod(),所以会出错。f前面加(Son)down cast就可以。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。