一.对象
对象是具有相关状态和行为的软件包。本节说明如何在对象中表示状态和行为,介绍数据封装的概念,并解释以这种方式设计软件的好处。
对象有两个共同的特征:状态和行为。对象将其状态存储在字段中(某些编程语言中的变量),并通过方法(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。隐藏内部状态并要求所有交互都通过对象的方法执行,这被称为数据封装——这是面向对象编程的基本原则。 比如:人有状态(姓名、年龄)和行为(吃饭、跑步)。大六边形中的是行为(eat和run),小六边形中的是状态(name和age),行为对外暴露,状态被封装。
将代码捆绑到单个软件对象中提供了许多好处,包括:
- 模块化:对象的源代码可以独立于其他对象的源代码编写和维护。创建后,对象可以很容易地在系统内部传递。
- 信息隐藏:通过仅与对象的方法交互,其内部实现的细节对外部世界保持隐藏。
- 代码重用:如果某个对象已经存在(可能由其他软件开发人员编写),则可以在程序中使用该对象。这允许专家实现/测试/调试复杂的,特定于任务的对象,然后您可以信任这些对象在您自己的代码中运行。
- 可插拔性和调试的易用性:如果某个特定对象出现问题,您只需将其从应用程序中删除,然后插入其他对象作为其替换对象即可。这类似于在现实世界中修复机械问题。如果螺栓断裂,您可以更换它,而不是整个机器。
二.类
在应用程序中,经常会发现许多相同类型的单个对象。可能还有成千上万的其他人存在。在面向对象的术语中,我们将人是称为实例。类是创建各个对象的蓝图。
以下类是人的一种实现:People
public class People {
private String name;
private int age;
public void eat() {
System.out.println(name+"-"+age+":start eat ......");
}
public void run() {
System.out.println(name+"-"+age+":start run ......");
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
下面是一个类,它创建一个的对象并调用eat和run方法
public class PeopleDemo {
public static void main(String[] args) {
People people = new People();
people.setName("小张");
people.setAge(18);
people.eat();
people.run();
}
}
控制台打印如下
小张-18:start eat ......
小张-18:start run ......
三.继承
不同的类通常彼此之间有一定数量的共同点。例如,学生,老师都具有人的特征(姓名和年龄)。然而,每个也定义了不同的附加功能:老师有所教授课程,学生有成绩。
面向对象的编程允许类从其他类继承常用的状态和行为。在Java编程语言中,每个类允许有一个直接超类,每个超类都有无限数量的子类。人是学生和老师的超类,老师和学生都是人的子类。
使用关键字extends实现继承
老师:
public class Teacher extends People{
String course;
}
学生:
public class Student extends People{
int grade;
}
四.接口
对象通过它们公开的方法定义它们与外部世界的交互。方法形成对象与外部世界的接口;例如,电视机的开关是电视对外的接口。按“电源”按钮打开和关闭电视。
在最常见的形式中,接口是一组方法体为空相关方法。如果人行为指定为接口,则可能如下所示:
public interface PeopleInterface {
void run();
void eat();
void setName(String name);
void setAge(int name);
}
要实现此接口,使用关键字:implements
public class PeopleImp implements PeopleInterface{
private String name;
private int age;
@Override
public void run() {
System.out.println(name+"-"+age+":start run ......");
}
@Override
public void eat() {
System.out.println(name+"-"+age+":start eat ......");
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setAge(int name) {
this.age = age;
}
}
五.包
包是组织一组相关类和接口的命名空间。从概念上讲,您可以将包视为类似于计算机上的不同文件夹。您可以将 HTML 页面保存在一个文件夹中,将图像保留在另一个文件夹中,将脚本或应用程序保留在另一个文件夹中。包的关键字是package。
如下图所示:teacher在day1包中。