继承和多态

    曾经和一个朋友聊谈到单例模式。当时那个朋友说了点对单例模式的独特见解:如果Singleton类有几个子类的话,那么就可以控制着几个类型只有一个实例,甚至还可以做更复杂的控制。当时大家也都是随便说说,现在想起来,确实是很有道理。一般来说,Singleton类的构造方法是private的,但是如果是protected,那么就是既可以有子类,又确保外部程序不能通过构造器生成类型的实例。

    一般所说的继承,都是类之间的关系,在面向对象的思想里面,面向接口编程是重要一点,而这个面向接口编程中的接口,则是被很多人所误解。从字面上解释,就是必须所有的类都实现某一个接口。但是,这样就犯了教条主义了。在这里,先说一下接口和抽象类的区别。当然了,语法上的区别就有很多了,从设计上来说,接口定义的是行为,抽象类定义的是属性。个人理解,面向接口编程里面的接口,不是所谓的interface,而是面向既定的行为编程,而这个既定的行为,在与其他模块、系统交互的时候,我们可以将其称为协议。所以说,面向接口编程,说道理,就是针对某个协议、某个行为编程。

    再说多态。多态的基础是虚函数,在Java里面,方法默认都是虚函数,所以说,Java里面方法的“穿透性”很强。
在.Net中,则加了override等关键字,来避免这样过强的穿透性。 下面看一下所谓的穿透性是什么。
 1class Parent {    
 2    public Parent(){
 3        Print();
 4    }

 5    
 6    public void Print(){
 7        System.out.println("Parent");
 8    }

 9}

10
11class Child extends Parent{    
12    public Child(){
13        
14    }

15    
16    public void Print(){
17        System.out.println("Child");
18    }

19}

20
21public class Test {    
22    public static void main(String[] args){
23        Parent p = new Parent();
24        Child c = new Child();
25    }

26}

27
    上面这段代码,输出的最终结果是:Parent  Child。这样子就很奇怪,在new Child()的时候,首先执行父类的构造方法,执行Print,但是执行的是子类的Print。仔细想一下,有点奇怪吧。

    方正是不管怎样,语法上是这样那就是这样了,继承和多态组合起来,可以应对很多动态变化的需求,如果再加上反射,那么基本上对于变化,就没有什么需要害怕的了。
(本篇没有任何实际内容,都是瞎扯,欢迎大虾拍砖)  
posted on 2007-10-26 22:16  Game_over  阅读(2261)  评论(10)    收藏  举报