不管是java程序猿还是c++程序猿,在找工作的时候总会看到一个招聘条件:深刻理解面向对象编程。那么什么是面向对象?通过对象作为程序猿的我们可以联想到哪些技术?这篇文章就从面向对象开始说起,并逐步深入。
什么是面向对象?
<java编程思想>里第二章的标题是:一切都是对象。并通过电视机与遥控器的例子说明了对象与引用的关系。文章让读者把电视机视为对象,把遥控器视为对象的引用,通过遥控器来调控电视机(即引用与对象的关联)。个人觉得这个抽象的比喻有点牵强,因为现实生活中电视机可以抽象为一类,而摆在家里的小米4K液晶电视可以理解为电视机这个类的对象。
面向对象是当今软件开发的主流方法之一,将数据与对数据的操作放在一起(封装),作为一个互相依存的整体,即为对象;对同类对象抽象出共性则为类。
面向对象特点:封装、继承、多态
封装:将客观事物抽象为类(如电视机),每个类对自身数据做保护(java访问权限)
继承:现实世界中有各种分类,如:生物有动物和植物,动物又有不同的科目如食肉动物、食草动物等。将现实中的概念映射为程序中的概念。在继承关系中,有父类和子类,父类又叫基类,子类又名派生类。之所以叫继承,是因为子类继承了父类的属性和行为。
多态:李宇春和张靓颖都会唱歌,但是他们唱出来的歌声是不一样的风格,抽象理解为:同一个行为具有多个不同表现形式或形态的能力。多态是依托于继承关系的,多态行为的触发需要满足三个条件:继承、重写、父类引用指向子类方法。
又见电视机
/**
家用电器
*/
public abstract class DomesticAppliance {
/**
* 外观
*/
private String appearance;
/**
型号
*/
private String model;
public String getAppearance() {
return appearance;
}
public void setAppearance(String appearance) {
this.appearance = appearance;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
/**
* 功能
*/
abstract void function();
}
/**
*电视机
/
public abstract class Television extends DomesticAppliance {
/**
* 是否为彩色电视
*/
private boolean colorized;
public boolean isColorized() {
return colorized;
}
public void setColorized(boolean colorized) {
this.colorized = colorized;
}
}
/**
*彩色电视机
*/
public class ColorizedTelevision extends Television {
@Override
void function() {
setColorized(true);
System.out.println("watch color show!");
}
}
/**
*黑白电视机
*/
public class WhiteTelevision extends Television{
@Override
void function() {
setColorized(false);
System.out.println("watch white show!");
}
}
类图继承关系:
以上便是对面向对象的思考,如有讲解不到之处,还请及时留言指出不足。