从设计意图上区分继承和实现

很久以来一直发现很多人根本就分不清什么是继承和实现。 这.NET 中继承是针对抽象类的,实现时针对接口的。所以我们就针对接口和抽象类来说吧。在我的项目中,我发现好多组员根本没有理解继承和实现的概念,对于接口和抽象类的使用选择非常模糊,对他们来说接口和抽象类的区别就在于,接口的方法都是virtual,而抽象类的方法是可以有实现的。但这只是语法上的区别,如果你对接口和抽象类的理解也仅限于此,那么我只能不客气的说你对OO的理解也就仅限于语法层次。

要真正理解继承和实现,首先要理解接口和抽象类在设计中的作用。首先我们说接口,举个简单的例子吧:

 

    public interface IReadable

    {

        StringRead(string fileName);

    }

 

    public interface IWritable

    {

        voidWrite(String fileName, String msg);

 }

 

上面我定义了两个接口,简单起见我都只定义了一个方法。那么如果我们在选择让我们的一个class实现这个两个接口中任意一个时,我们的意图是什么呢?

 

    我需要我的类具有可读(或者可写)的能力,强调的是类具有可读(或者可写)的能力。

 

  那么抽象类呢?还是一样,先来段代码(毕竟我们都是程序员,代码看起来清楚、亲切):

 

    public abstract class Reader

    {

        public abstract StringReader(string fileName);

}

 

 这里我定义了一个抽象类,那么如果我们在选择让我们的一个class继承这个抽象类,那我们又是什么想法呢?

 

     我的类本身就是一个Reader,只是我是一个Document Reader或者PDFReader,这里强调的是事物的本质抽象。

 

 总结: 当然你可以把抽象类当接口来用,编译器是没有办法检查你的设计思路。因为编译器是指要求你的代码符合它的规范。但是对于设计来说,正确的区分继承和实现是非常重要的,这体现了你的设计意图和设计思想。

 

 ps: 谢谢FrankYu的指正

 

转载于:https://www.cnblogs.com/AlecHe/archive/2010/03/24/1693686.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值