java多态要注意的一个问题
2006-11-05 12:10
561 查看
class food {
public String name = "food";
public void showMess(String mess) {
System.out.println("food.showMess=" + mess);
}
public String getName() {
return this.name;
}
}
class bread
extends food {
public String name = "bread";
public void showMess(String mess) {
System.out.println("bread.showMess=" + mess);
}
public static void main(String[] args) {
bread b = new bread();
food f = b;
f.showMess("f");
//f.showMess()调用的是b的showMess方法
System.out.println("name: " + f.name);
//那为什么这里f.name为"food",不是b的name子段??
}
这里调用子类的方法,而调用父类的属性。可以按如下解释:
多态只发生在方法上,而不发生在属性上。f.name输出什么在编译期已经被决定。可以引用C++中静态联编的概念来解释。
而方法的调用可以用动态联编来解释。
food f = new bread(); 在动行期,f指向哪个对象也是在变化的,而不是一直指向bread。如果像类中有一个方法getName()。而子类中没有。那么f.getName() 时。 f就会被联编到父类上。会输出父类的name,而非子类的。
public String name = "food";
public void showMess(String mess) {
System.out.println("food.showMess=" + mess);
}
public String getName() {
return this.name;
}
}
class bread
extends food {
public String name = "bread";
public void showMess(String mess) {
System.out.println("bread.showMess=" + mess);
}
public static void main(String[] args) {
bread b = new bread();
food f = b;
f.showMess("f");
//f.showMess()调用的是b的showMess方法
System.out.println("name: " + f.name);
//那为什么这里f.name为"food",不是b的name子段??
}
这里调用子类的方法,而调用父类的属性。可以按如下解释:
多态只发生在方法上,而不发生在属性上。f.name输出什么在编译期已经被决定。可以引用C++中静态联编的概念来解释。
而方法的调用可以用动态联编来解释。
food f = new bread(); 在动行期,f指向哪个对象也是在变化的,而不是一直指向bread。如果像类中有一个方法getName()。而子类中没有。那么f.getName() 时。 f就会被联编到父类上。会输出父类的name,而非子类的。
相关文章推荐
- 对java中的String采用+=连接字符串需要注意的一个问题
- 关于java的io一个需要注意的问题
- 在做JAVA和UCENTER整合登陆时一个要注意的问题
- 一个菜鸟java码农的成长之路(3):ListIterator的使用及注意的问题
- 对java中的String采用+=连接字符串需要注意的一个问题
- Java创建文件要注意的一个问题
- Java多态中的一个小问题
- 关于jboss 5.0.0 上配置数据源要注意的一个问题 Java获取JBOSS数据源
- java中异常注意问题(发生在多态是的异常问题)
- Java基础 Arrays.atList需要注意的一个问题
- java继承,多态方面的一个问题,定义一个父类对象,用子类new
- Java开发向导页时应该注意的一个问题
- 在做JAVA和UCENTER整合登陆时一个要注意的问题
- 使用java.lang.Integer需要注意的一个问题
- android ViewGroup删除子视图时应该注意的一个问题
- Java Web 注意事项----Tomcat 工程发布错误问题
- java中多态的经典问题分析
- 请教一个java中ftp客户端的问题
- 关于java时间设置时遇到的一个问题。