对于程序员来说,就需要通读代码,找出可以复用的方法,然后重新调用,不能复用的就重新写一个。时间久了,方法就会越来越多,系统维护越来越复杂。
面向对象,其实就是我们通过点外卖的方式来“做饭”。我们知道我们需要一顿饭,我们只需要打开外卖软件,在里面选择我们需要的菜品然后下单就可以了。我们不关心饭店做饭的过程。想吃什么点什么,家里来人了就再下一个订单,不想吃米饭了,想吃馒头了,也可以给饭店打电话,让他们把米饭换成馒头。
外卖软件.点餐(红烧肉,糖醋鱼,可乐一瓶).送达时间(一小时后).备注(可乐加冰)所以,通过面向对象的方式“做饭”,就像上面的代码一样。
哦,我明白了,面向对象就是把本来可能需要自己做的事情交给别人来做?对于我来说,外卖软件就是个对象,我再面向他“做饭”,其实是他帮我做的。
额、你说的也对,也不对。在这个场景中,确实可以把外卖软件当做是「对象」。其实,在面向对象编程中,抛弃了函数,想要实现一个功能不再是通过函数的叠加调用实现的了。而是通过对象。
对象就是对事物的一种抽象描述。现实世界中的事物,都可以用「数据」和「能力」来描述。
比如我要描述一个人,「数据」就是他的年龄、性别、身高体重,「能力」就是他能做什么工作,承担什么样的责任。
描述一个外卖软件,「数据」就是他包含的菜品,而「能力」就是他可以点菜。
什么是封装?
我们把「数据」和「能力」组合成一个对象的过程就叫做「封装」。
封装的结果就是可以有一个类,通过这个类我们可以获得一个对象。然后我们就可以通过给这个对象下命令,让他执行自己的「能力」。
除了把「数据」和「能力」封装成一个「对象」更加方便使用以外,还有啥其他的特点么?
封装只是面向对象的第一步,目的是把现实世界的东西抽象成对象。面向对象真正有威力的地方是「继承」和「多态」。
举一个不是很恰当,但是女朋友比较容易理解的例子。
我们使用外卖软件点餐,当我们第二次去某一家店时,外卖软件会提示你上一次你在这家点了什么,你可以点击<再来一单>把上次的菜品直接加到购物车中,这就是「继承」。而在购物车中的物品你可以直接付款下单,也可以把增删和修改菜品。这就是「多态」。
什么是继承?
在面向对象编程中,当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类「继承」这个父类。继承后子类自动拥有了父类的部分属性和方法。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
比如:
狗{吠();
}
牧羊犬 继承 狗{
放羊();
}
上面的例子中,狗类是父类,牧羊犬类是子类。牧羊犬类通过继承获得狗类的吠()的能力,同时增加了自己独有的放羊()的能力。转换成Java代码如下:
public class Dog{public void bark(){
System.out.print("旺旺旺");
}
}
public class HerdingDog extends Dog{
public void herd(){
System.out.print("放羊中....");
}
}
public class Main(){
HerdingDog dog = new HerdingDog();
dog.bark();
dog.herd();
}
什么是多态?
同一操作,作用于不同的对象,可以产生不同的结果,这就是「多态」。通常说的多态都是指运行期的多态,也叫动态绑定。
要实现多态,需要满足三个条件: