谈一下我对OOP的了解
OOP也就是面向对象(Object Oriented Programming。 据我们所知,早期的计算机语言是面向过程,但是那时所要解决的问题都不是很难,通常一个算法就可以解决的问题。 随着计算机的发展和我们所遇到的问题越来越复杂,为了解决这些问题,人们提出了面向过程(OOP)。 生活中的一切事物都会有属性和行为,也就对应着是计算器语言的属性和方法。
举一个我在网上看见的很简单的例子,我也觉得很容易理解。
有一天比如你想吃青椒肉丝了。 此时我们有两张办法:
1.去菜场买菜, 青椒,肉丝,姜蒜等材料。
2. 直接去饭店说 老板我要一份青椒肉丝。
1就是面向过程,2就是面向对象。
如果此时你不想吃青椒肉丝了,比如想吃麻婆豆腐了, 你就需要重新去菜场买菜,那就有点麻烦了。2的话,你可以跟老板说 老板还一份麻婆豆腐。
面向对象可以降低耦合性, 我们不用知道做饭的这个过程,提高了维护性。
反之,面向过程却需要一步一步的解析问题。
OOP有三个特性:
1.封装性
让抽象的事物保护自身的状态,防止非其他事物对其进行错误的状态改变操作。我们抽象完一个事物后,可能在特定的条件下,其本身的状态需要改变,但是这个改变并允许其他的事物来进行,这样的改变只允许这个事物认同的操作域来进行,可以是该事物本身,也可以是它信任的其他事物。这样我们就能对我们抽象完的每个事物进行自身数据的保护。
举例来说明吧
public class example{
public int sum(int a, int b){
// a+b的和
// 返回一个sum值
}
}
我拿给别人用,别人就只用知道这个是求和就好,别人不用知道我怎么实现a+b, 只用知道结果就好。
2.继承性
让抽象出来的事物具有本应该具有的联系。我们能用类来描叙一个抽象的事物,同时能用对象来描叙具体的事物,但是这些事物都是独立的,彼此之间没有应该有的联系,这样的孤立设计并不符合现实逻辑,让事物之间的联系得到描叙,我们就需要继承,例如:发明自行车的人并不是一开始就发明了多人自行车,这些都是从双轮自行车演变和发展而来,但是他们都有共同的特点,有轮子,有车架子,等等。让我们用继承的关系把这两个现实的抽象联系起来,这样我们就能设计出不孤立的类,而是和其他类有联系的类
正如继承两次,就是继承了上一代的属性和方法,还是举例来说吧。
我们先来定义一个父类。
public class A{
String name;
int age;
public void grow(int grow){
age += grow;
}
}
好了, 然后我们再来写一个子类B, 来继承A
public class B extends A//从a类继承{
String name;
int age;
public void grow(int age){
age+=grow;
}
// 此时b类有一切a类的属性和方法,并且还可以自己增加新的方法
public void changeName(Strinng nm){
this.name = nm;
// 此时b还可以访问a的属性
}
}
这就是oop的继承性, 可以增加代码的可重用性,拓展性,修改性。 我们想修改拓展时不用去重写整个对象,直接继续修改即可。
3.多态性
多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是对同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:方法重写和对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
多态性是基于继承性来说,所以放到最后。多态性最简单的来说可以重写继承对象的方法。