Chapter 9 Abstract Classes and Interfaces

1. 抽象类不能创建任何实例,但可以被当作数据类型使用,因此可以创建抽象类类型的数组
ClassAbstract[] example = new ClassAbstract[];

2. 含有抽象方法的类必须被声名为抽象类,但抽象类不一定必须包含抽象方法。
作为抽象类的子类,如果没有实现(implement)所有的抽象方法,也只能被声名为抽象类。
抽象类也可以有自己的构造函数,以便被子类继承。

3. 子类可以重载父类的方法,并把它定义为抽象的。尽管这很少见,但是当父类的方法在子类中变得不可用时,就必须这么做。

4. 上一章跳过的一个概念:Hiding Data Fields and Static Methods
子类无法重载父类的数据域(无论静态与否)或静态方法,当你在子类中定义了同名的变量或是静态方法的时候,原来的方法或变量就被隐藏了,但仍然存在,访问它们有两种方法,一种是用super关键字,另一种就是通过父类的reference访问。
例如
class Animal {
public String news = "Animal's news";

public static String smile() {
return "smile from Animal";
}
}

class Tiger extends Animal {
public String news = "Tiger's news";

public static String smile() {
return "smile for Tiger";
}
}

x.news 为 Animal's news
x.simle() 返回 smile from Animal
只有将x造型(casting)为Tiger时,才会返回Tiger的内容。
但是实例方法(instance method)不存在这个现象。

5. Calendar 类及其子类

6. 接口 Interface
interface是一种类似于class的结构,且只包含常数和抽象方法。
如java.lang.Comparable
package java.lang;

public interface Comparable {
public int compareTo(Object o);
}

max方法用来取两个对象中较大的那一个:
public class Max {
public static Object max(Object o1, Object o2) {
if (((Comparable)o1).compareTo(o2) < 0)
return o1;
else
return o2;
}
}

使用max:以字符串为例
String s1 = "abcde";
String s2 = "abcdg";
String s3 = (String)Max.max(s1, s2);

(Comparable)o1 告诉编译器,把o1转型为Comparable以便于调用comepareTo方法。


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

2.1 Java notes

Posted on 2007-04-22 20:23 ZelluX 阅读(83) 评论(0)  编辑  收藏 所属分类: OOP
2007-02-01 21:49:19
只有注册用户登录后才能发表评论。


网站导航: