文章目录
简单介绍面向对象
Java语言是一种面向对象OOP(Object Oriented Programming)还有OOD(面向对象的设计),OOA(面向对象的分析)的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,
这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。
面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
什么是类和对象?
类:简单来说类是对像是世界中事务的抽象。
例如:Student类
Student类应当含有:name, age, gender… 等属性,像这样拥有相同点的事物抽象为一个类。
类中包括:
- 所有对象所有共有的特征:属性(静态)。
- 所有对象的所有共有的行为:方法(动态)
对象:简单来说就是现实中具体的个体。
例如:Student类中具体的对象Tom。
类是对象的模板,对象是类的具体实例。
一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。
三大特性:
1.封装
在java中,封装就是把过程和数据包裹起来,对数据的访问只能通过已经定义的接口,面向对象计算始于这个基本概念,即现实世界已经被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象
当我们在一个类中定义成员变量时,会指定一个变量的类型,除此之外,还会有修饰符的部分,在此给出定义成员变量的规范格式:
- [修饰符] 变量类型 变量名称;
- [修饰符] 变量类型 变量名称 = 初始值;
- 例如:private String name;
关于修饰符的权限:
2.继承
-
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
-
继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
举例:
父类:人可以抽象为一个类,每个人有名字,性别,年龄等属性,人还可以进行一系列动作。
子类:学生 继承 人 这个类,每个学生有自己的 教室,可以进行 学习 动作。
子类:老师 继承 人 这个类,每个老师有自己的 薪资,可以进行 教学 动作。
下面用UML图介绍来了解下继承:
从图中可以很直观的看出子类和父类的关系,图中的关系为泛化,即Person类泛化为Student类和Teacher类。
而在Java编程中用extends来体现子类和父类的继承关系。(extends 原意为:拓展,伸张,即子类不仅可以和父类一样,还可以拥有自己独特的方面)
下面用Java语言来解释上面UML图中所展示的内容:
Person类:
Student类
Teacher类
这样,就体现了 学生 和 教师 对 人 这个类的继承关系。(Object是所有类的父类)
3.多态
什么是多态?
多态就是:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。
多态有什么作用?
- 大大提高程序的可复用性。(继承)
- 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
概念看不懂?
下面我们举一个例子来进一步了解多态:
例如编写一个可以进行+ - * /的计算器:
如上图所示,我们可以这样编写计算器这个类,但是如果这么做,简单的代码维护起来虽然不难,但是如果代码复杂的情况维护起来就很费劲,所以,我们将代码进行改进,如下图所示(只以加减法为例):
Calculator类
Add类
Sub类
让我们对代码进行测试:
例子太简单?
那我们再来看看更简单的例子:
Shape类中有个draw()方法,通过多态可draw()出不同的形状:
进行测试:
方法重载 Overload
在同一个类中,允许存在一个以上的同名方法,只要他们的参数类型和参数个数不同即可(与返回类型无关)
最典型的例子就是构造方法(无参构造和有参构造方法)。
- 方法重载的特点:与返回值无关,只看参数列表。
重写(覆盖) @Override:
- 方法名需要与父类一摸一样才可以进行重写
最典型的例子就是toString()方法。
在Object中toString()调用的方式是:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
大多时候我们是要对其进行重写以方便我们操作:
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
接口 interface:
接口就是:
- 接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)。
- 接口就是一个规范,他没有提供任何的具体实现,具体的功能由接口的子类去实现。
- 接口是一个标准,一般用在能不能具有某个功能。
举个简单的例子:灯泡在最早之前的接口是大小不一的,这就导致了不方便性。权威厂商在意识到问题后同其他大厂老板商讨,定制出一套规范作为通用灯泡。但是老板并不会自己执行,而是将规范法发配个各个厂,这样产品的规范就得到了保障。