抽象类简单介绍

抽象类就是不能实例化的类,因为它内部的一些抽象方法还没有被实现(你不可能去创建一个连方法内容都没有的类的对象)。
它的作用是,把一些子类共有的方法全部集中在父类(也就是这个抽象类)中,但它还提供一些抽象方法(所谓抽象方法就是没有实现的方法只是声明了一下方法名和参数)子类一定要去实现它们。
问题就在,为什么它要提供这些抽象方法?为什么它自己不实现这些方法?
我简单举个例子,比如说:
我觉得现在的一些浏览器的功能不能满足我,我想做个浏览器自己实现了一些功能,但是浏览器的内核我没有能力来写(能写出来我就是高手啦,哈哈),所以我想调用其它现有浏览器的内核(就像the world做的那样),但是我想做的比它还好,因为the world只能用IE内核,我想IE和firefox的内核都能用(可能还有其它的内核),觉得IE好的用IE内核,觉得FF好的用FF的内核,根据用户的爱好设定。
其它功能部分我都实现了,为了满足我前面的需求我建了一个抽象类:
[code:php]
import flash.errors.IllegalOperationError;
public class AbstractBrowserCore
{
……..
public function someOtherCommonFunction(){….} //一些非抽象公共函数
………
// 抽象方法
public function browse(url:String):String
{throw new IllegalOperationError(”abstract function must be overriden”);}
}

// IE实现类
public class IEBrowserCore extends AbstractBrowserCore
{
override public function browse(url:String):String
{
// 调用IE的api
}
}

// FF实现类
public class FFBrowserCore extends AbstractBrowserCore
{
override public function browse(url:String):String
{
// 调用FF的api
}
}

// 未来浏览器内核的实现类
public class SomeOtherBrowserCore extends AbstractBrowserCore
{
override public function browse(url:String):String
{
// 调用其它浏览器内核的api
}
}

// 调用这些类
public class RunApp
{
private var bcore:AbstractBrowserCore;
public function set broswerCore(core:AbstractBrowserCore):void
{
this.bcore = core;
}

public function onKeyDownEvent(e:Event)
{
var code:String = this.bcore.browse(this.inputText.text);
if(code == 404) outputText.text(”文件未找到”);
else if…..
}
}
[/code]
用户只要设置了他喜欢的内核就可以了,这就是多态的力量!可以随意更换实现,但是主程序更本就不需要有什么改变,就像FF的插件一样,非常灵活,来去自由,容易扩展。
其实像http就是一个非常抽象的协议,我们根本就不关心服务器的后台到底是什么,管它是jsp,php,asp,我们只要能看到我们想看到的就可以了。
不知道有没有解释清楚,呵呵:-)

Leave a Reply