叩开抽象的大门(1)——抽象类、接口
2011-05-27 23:32
183 查看
面向对象的世界里,抽象是一个非常重要的概念。
这里我假定你已经知道什么是封装、继承、多态,却对什么什么是抽象还十分地迷茫。
现在让我们一起来来叩开抽象的大门。
抽象,就是抽出事物本质的东西。
风铃中的刀声:抽象:抽取对象的共同特征
egmkang:共同特征有:数据,行为
一、认识它
要理解面向对象里的抽象,首先需要知道两个概念:抽象类、接口。
你肯定知道抽象类可以有属性、方法,抽象类里方法可以只是一个声明。
也知道接口就是一组方法的声明。
也知道抽象类和接口都不能直接 类名/接口名 实例 = new 类名/接口名(); 来实例化。
举个例子来说明:
蜂鸟的翅膀和翠鸟的翅膀都是鸟类的翅膀。翅膀组合成鸟。(在这里我们假设所有的翅膀都有fly()的方法,并且所有的鸟都能飞。)
鸟类的翅膀不实现fly()方法,而是抽取出了子类的共同属性和方法。抽象类实现了子类的实现方式相同方法,而只把实现方式不同的方法声明为抽象方法,交由子类分别去实现。这样一来,同样的代码便不会出现两次了。
这图体现了蜂鸟的翅膀和翠鸟的翅膀都实现了飞的接口,而鸟依赖飞的接口。
接口只是告诉子类,你应该有fly()的方法,fly()方法的参数和返回值应该是void。
二、区分它
螺旋桨实现飞的接口,合情合理。但螺旋桨继承鸟类翅膀???脑袋进水了有木有!!!
为什么鸟要用螺旋桨飞?因为我的鸟只想要fly(),而有时候鸟想飞地更高、更久、更省力,此时鸟类的翅膀都不能满足需求,给它螺旋桨吧。
这里我瞎扯一下。抽象派的艺术家,抽取出的是自己所想要情感,因此我们看到他的绘画作品,便能直接感受到艺术家的心情。因为艺术家略掉了所有次要的信息,因此他表达出来的效果便十分强烈。作为程序员,略掉次要的信息,意味着写出来的代码可读性更好,维护起来也更容易。
三、发疯的类图
抽象类和接口的出现使得软件设计更加多样,通过使用不同的抽象方式,可以设计出各种各样的系统。
如果你要的仅仅是一只蜂鸟。后面的设计明显小题大做了。。。
这里我假定你已经知道什么是封装、继承、多态,却对什么什么是抽象还十分地迷茫。
现在让我们一起来来叩开抽象的大门。
抽象,就是抽出事物本质的东西。
风铃中的刀声:抽象:抽取对象的共同特征
egmkang:共同特征有:数据,行为
一、认识它
要理解面向对象里的抽象,首先需要知道两个概念:抽象类、接口。
你肯定知道抽象类可以有属性、方法,抽象类里方法可以只是一个声明。
也知道接口就是一组方法的声明。
也知道抽象类和接口都不能直接 类名/接口名 实例 = new 类名/接口名(); 来实例化。
举个例子来说明:
蜂鸟的翅膀和翠鸟的翅膀都是鸟类的翅膀。翅膀组合成鸟。(在这里我们假设所有的翅膀都有fly()的方法,并且所有的鸟都能飞。)
鸟类的翅膀不实现fly()方法,而是抽取出了子类的共同属性和方法。抽象类实现了子类的实现方式相同方法,而只把实现方式不同的方法声明为抽象方法,交由子类分别去实现。这样一来,同样的代码便不会出现两次了。
这图体现了蜂鸟的翅膀和翠鸟的翅膀都实现了飞的接口,而鸟依赖飞的接口。
接口只是告诉子类,你应该有fly()的方法,fly()方法的参数和返回值应该是void。
二、区分它
螺旋桨实现飞的接口,合情合理。但螺旋桨继承鸟类翅膀???脑袋进水了有木有!!!
为什么鸟要用螺旋桨飞?因为我的鸟只想要fly(),而有时候鸟想飞地更高、更久、更省力,此时鸟类的翅膀都不能满足需求,给它螺旋桨吧。
这里我瞎扯一下。抽象派的艺术家,抽取出的是自己所想要情感,因此我们看到他的绘画作品,便能直接感受到艺术家的心情。因为艺术家略掉了所有次要的信息,因此他表达出来的效果便十分强烈。作为程序员,略掉次要的信息,意味着写出来的代码可读性更好,维护起来也更容易。
三、发疯的类图
抽象类和接口的出现使得软件设计更加多样,通过使用不同的抽象方式,可以设计出各种各样的系统。
如果你要的仅仅是一只蜂鸟。后面的设计明显小题大做了。。。
相关文章推荐
- java中抽象类和抽象接口的区别
- Java 的抽象特性:抽象类与接口深度解析
- 7月21日---关键字、抽象方法、抽象类、接口、多态及总结、设计模式
- [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类
- 2.0 面向对象 类与实例(关键字)、封装、继承、多态(虚方法,抽象类,抽象方法,接口)
- [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类
- 接口、抽象类、抽象方法、虚方法 的区别
- 接口,抽象类,抽象方法,虚方法简单总结
- C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
- C#类、接口、虚方法和抽象方法-非抽象类与接口的差别
- [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类
- 设计模式基础——抽象类、抽象方法、接口与虚方法
- C#中的虚方法、抽象方法、抽象类以及接口
- [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类
- 对抽象编程:接口和抽象类
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类
- C#类、接口、虚方法和抽象方法-抽象类和接口的区别