易截截图软件、单文件、免安装、纯绿色、仅160KB

java中的方法重写,小弟新手 - Java / Java SE

class door{

}
class woodDoor extends door{

}
class math{
static public door getMsg(){
return new door();
}
static String getS(){
return new String("父类");
}
}
public class MaoPaoPaiXu extends math{
public static void main(String args[]){
MaoPaoPaiXu s=new MaoPaoPaiXu();
System.out.println(s.getS());
}
static public woodDoor getMsg(){
return new woodDoor();
}
static String getS(){
return new String("子类");
}
}
请前辈帮我讲解一下调试输出的是”子类“这是否说明父类的 getS()被重写了???(书上说static方法无法被重写)
如果将MaoPaoPaiXu s=new MaoPaoPaiXu();改写为math s=new MaoPaoPaiXu();输出的则是“父类”
math s=new MaoPaoPaiXu();说说明编译的时候是math 运行的时候是MaoPaoPaiXu,s最后是MaoPaoPaiXu的对象引用
为什么还输出“父类”
static方法牵扯到了面向对象与全局函数的问题
假如你的getS()方法没有static关键字,那math s=new MaoPaoPaiXu();引用s指向MaoPaoPaiXu(),
当调用getS()时,他是通过向对象发送消息来实现的,虽然math和MaoPaoPaiXu都有getS()方法,
s.getS(),s是引用,对象是MaoPaoPaiXu,调用方法是向对象发送消息,所以调用的是子类的getS()方法
但是你加了static,方法就不是这样调用的了
确切的说,加了static的方法是全局方法,而且他不是通过向对象发送消息来实现方法调用的,而是直接调用本身的方法
所以你虽然s是MaoPaoPaiXu的引用,但却调用不到MaoPaoPaiXu的getS()方法

加了st


相关问答:

tomcat环境下jsp编译错误,求解! - Java / Web 开发

org.apache.jasper.JasperException: Unable to compile class for JSP: 
An error occurred at line: 52 in the jsp file: /vip_info.jsp
ÕË cannot be resolved
49: <table border="1& ......

php跟jsp之间session共享的问题 - Java / Web 开发

最近一个项目中遇到一个问题:在原有的一套系统中(php开发)添加一些小功能(jsp开发),原来用户系统都是php开发的,我如何在jsp开发的功能中做到用户信息session同步呢? 有人是否有做过类以项目,想听听大家的看法
......

jsp中request乱码问题(急) - Java / Web 开发

各位老大好。。。小弟有一个乱码问题急需帮忙解决
我在本页中用request.getParameter("name")取变量。。变量的赋值为汉字。我在页面的开头加了<%@ page language = "java" contentType=&quo ......

JavaScript函数一个很奇怪的问题 - Java / Java EE

在JSP页面有一个<input type="hidden" name="index" value="0">/>控件
当我用下面的JavaScript函数改变其value的值的时候 如果满足条件(即i>=3的时候)为什么value的 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号