什么是面向对象?
说实话这个问题个人感觉每个人有每个人的理解,说法呢各不相同,我个人的理解面向对象是指的是解决问题的过程中的一种思想:想要解决某一个问题,就必须找到谁能解决这个问题,能解决这个问题得东东就是对象,找到这个对象之后就通过这个对象的功能去解决我们要解决的问题,至于它怎么去解决,我不管,我也不需要管,我只需要知道这个对象能解决这个问题,并调用相应的解决问题的功能就行了,功能怎么实现就不是本层的问题,而是在创建这个对象时应该解决的问题。
举一个从别人的博文受启发而来的例子:
把大象装冰箱要怎么做?
按照面向过程的思想的话我们要把它分为三部:
1、打开冰箱门
2、把大象装进去
3、关上冰箱门
而按照面向对象的思想的话我们就不关心它有几步了,我们只需要知道谁能把大象冰箱就行了,毫无疑问,只有人这个对象才能( 打开冰箱门、把大象装进去、关上冰箱门),所以我们只需要:
找个人把大象装进去
看了上面所说的解决问题的面向对象的思想大家因该能感觉到,面向对象最核心的就是对象,什么是对象呢?生活中万物皆对象,一张桌子,一块橡皮这样实实在在真实存在的东西是对象,一句话,一阵风这种看不见摸不着的东西也是对象。而在面向对象的语言中,我们要做的就是把现实中存在的并且我们解决问题需要的对象进行抽象封装成一个类,到我们需要这个对象的时候就用这个类来声明创建一个这样的对象,用这个对象所有的属性、方法来帮我们解决问题。
为什么要用面向对象编程
用这种面向对象写的程序易维护、易扩展、易复用、灵活性高。
面向对象的三大特性
封装
封装指的就是我们把现实世界的事务抽象成类的过程。根据问题的需要,我们将在程序中用到的对象进行抽象,提取出此类对象共同的性质(属性)、行为(动作、方法)封装成一种数据模型——类。封装提高了数据的安全性,使用者不能使用”变量名.属性名“的方式对对象的 属性进行更改;隐藏了实现过程,在使用者使用相应的功能时,只需要调用相应的方法即可,不需要知道内部过程是怎么实现的,同时也简化了调用者的操作;方便修改,当我们需要对一些方法进行修改时,只需在本类中操作即可。
继承
继承主要体现的是类与类之间的关系,提高了代码的复用性,子类能够继承父类的全部属性和方法,同时还能够扩展属于自己的属性和方法,这样我们就不需要在子类中把父类中已经存在的方法再写一遍,同时是实现方法的重写,继承的多态方面前提。
多态
多态就是说我们在调用同一个方法(同名)时,最终展现出的结果确实不同。多态分为两种:一种是操作名称的多态,通过方法的重载实现;另一种是和继承有关的多态。
操作名称的多态(重载)
重载是指在同一个类中可以写多个同名的方法,但是他们的参数必须不同(可以是参数类型的不同,也可以是参数的个数不同),返回值类型可以相同也可以不同,没有要求。
例如写一个图形的类,其中有多个名字相同的方法用来求周长,根据传进来的参数个数不同来根据不同的公式求得不同的图形的周长,代码如下:
package com.mfs.test;
public class Graphical {
//三角形周长
public double getPerimeter(double a, double b, double c) {
double p = a+b+c;
return p;
}
//矩形周长
public double getPerimeter(double a, double b) {
double p = 2*(a+b);
return p;
}
}
与继承有关的多态
此处内容将在继承中呈现