1.

主  题: 请教关于method override
作  者: amatuer () Blog
等  级:
信 誉 值: 100
所属社区: Java J2SE / 基础类
问题点数: 80
回复次数: 2
发表时间: 2007-2-16 23:50:00


在调用SubClass中的addAll()时,结果输出为"sub"。SuperClass中的addAll()调用的是super.addAll(),按我的理解尽管super.add()被重写,super.addAll()应该调用super.add(),而结果却不是这样。谁给解释一下?
以下示意性的代码:
class SuperClass {
public add() {
System.out.println("super");
}

public addAll() {
add();
}
}

class SubClass extends SuperClass {
public add() {//overriding
System.out.println("sub");
}

public addAll() {//overriding
super.addAll();
}
}

interpb(曾曾胡,深怕情多累美人!!!) ( ) 信誉:87 Blog 2007-2-16 23:58:48 得分: 0


public addAll() {//overriding
super.addAll();
}


这样只是说 调用父类的addAll 方法

但是父类在调用这个addAll的时候会调用add 这个时候因为多态所以调用SubClass的add




Top
interpb(曾曾胡,深怕情多累美人!!!) ( ) 信誉:87 Blog 2007-2-17 0:05:02 得分: 0


public void addAll() {//overriding
super.addAll();
System.out.println(super.getClass());
System.out.println(super.hashCode());
System.out.println(this.hashCode());
}

你可以打印出super的实际是属于SubClass的对象的一个引用
实际上super与this是同一个对象

2.

如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。
instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}

在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:

public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。

然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

public double calculate(PhoneBill bill) {
//计算电话账单
}

public double calculate(GasBill bill) {
//计算燃气账单
}

所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。


posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2.16 Java notes - CSDN 记录

Posted on 2007-04-22 20:24 ZelluX 阅读(263) 评论(0)  编辑  收藏 所属分类: OOP
2007-02-16 22:15:50
只有注册用户登录后才能发表评论。


网站导航: