如何將一個標簽類優化為類層次 – 子類型化 1.為標簽類中的每個方法都定義一個包含抽象方法的抽象類,這些方法的行為都依賴于標簽值 2.為每種原始標簽類都定義根類的具體子類 Figure類對應的類層次
/** * 子類型化:定義能表示多種風格對象的單個數據類型,標簽類是對其的一種效仿 */public abstract class Figure { abstract double area();}public class Circle extends Figure { final double radius; Circle(double radius) { this.radius = radius; } @Override double area() { return Math.PI * (radius * radius); }}public class Rectangle extends Figure { final double length; final double width; Rectangle(double length, double width) { this.length = length; this.width = width; } @Override double area() { return length * width; }}最后擴展:類層次可以用來反映類型之間本質上的層次關系,有助于靈活性,并且進行更好的編譯檢查 如:正方形本質上也是一種矩形,在類中如何反應?
public class Square extends Rectangle {// Square(double length, double width) {// super(length, width);// // TODO Auto-generated constructor stub// } Square(double side) { super(side, side); }}總結:標簽類很少有適用的時候.當你想要編寫一個包含顯示標簽域的類時,應該考慮一下,這個標簽是否可以被取消,這個類是否可以用類層次來代替.當你遇到一個包含標簽域的現有類時,就要考慮它重構到一個層次結構中去.
新聞熱點
疑難解答