Java复习笔记——系统整理
一、面向对象概念
1. 类与对象
1.1 面向过程和面向对象
面向过程 (Procedural Programming)侧重流程
面向对象 (Object-Oriented Programming )(OOP) 侧重功能
1.2 类和对象的概念、关系、组成
- 概念:
- 类:类是一个模板,它描述一组具有相 同属性和方法的对象
- 对象:最小子系统,有属性和方法。
- 关系:类是对象的抽象,对象是类的实例
- 组成:
- 成员变量(Attributes)
- 构造方法(Constructor) 一个类可以有多个构 造方法
- 成员方法(Methods)
1.3 构造函数,对象的初始化、使用
- 构造方法:在创建一个对象的时候,至少要调用一个构造方法。 构造方法的名称必须与类同名,一个类可以有多个构 造方法。
- 对象初始化:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象
- 对象的使用:
/* 实例化对象 */ ObjectReference = new Constructor(); /* 访问成员变量 */ ObjectReference.variableName; /* 访问成员方法 */ ObjectReference.MethodName();
2. 封装、继承、多态
2.1 封装 Encapsulation
好处:
从设计上讲,为了实现模块化
从使用上讲,减少了复杂度
良好的封装能够减少代码的耦合
实现:
private: 只能被该类的对象访问。
default: 即不加任何访问修饰符,只允许在同一个包中进行访问。
protected: 只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
public: 不仅可以跨类访问,而且允许跨包(package)访问。
一个源文件中只能有一个public类;
源文件的名称应该和public类的类名保持一致;
如果一个类定义在某个包中,那么package语句应该在源文件的首行;
2.2 继承 Heritage
继承是一种类和类之间的关系,是一种“is a kind of”的关系。
好处:
易于修改,容易扩展
实现:
public class Parent{ … }
public class Child extends Parent { … }
java中的继承是单继承的,一个子类只能继承一个父类,使用extends关键字
子类继承了父类中所有非private成员方法(除了构造方法)和所有非private的成员变量。
super:
对于构造函数而言,它只能够被调用,而不能被继承。
当我们需要调用父类的构造方法时,只需使用super()即可
重写(覆盖) override:
子类中有和父类中可访问(可继承到子类)的同名&&同返 回类型&&同参数表的方法,就会重写(覆盖)从父类继承来 的方法。
重载 overload:
被重载的方法必须改变参数列表(参 数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
final 关键字声明类可以把类定义为不能继承的,即最终类; 或者用于修饰方法,该方法不能被子类重写:
向上转型
上转型对象可以操作被子类继承和重写的方法,但不能操作子类新增的成员变量和方法。
2.3 多态 Polymorphism
多态就是指一种名称定义不同的方法
分类
编译时多态 - 方法的重载(overload)
运行时多态 - 程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程 时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实 例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运 行期间才能决定。
实现方法(继承、接口)
以继承实现多态 -向上转型、方法重写,以一般代表特殊,以特殊代替一般
以接口实现多态
如何使用
可以在方法的参数中传入其父类(或接口)类型,在运行时会根据实际的运行时类型来 在方法中进行相应的操作。
多态用于返回值,可以在方法的返回值类型上使用其实际返回值的父(接口)类型,不关心返回值的实际类型。
3.抽象类和抽象方法,静态方法和静态变量
具体类:可以被实例化的类
抽象类:不能被实例化的类
定义抽象类的基本目的是提供合适的超类, 使其他类可以继承它,以实现共享。
public abstract class Form{ … public abstract void draw(); }
4. 接口
定义
[public] interface 接口名 [extends 其他的接口名列表] {
[public static final] 数据类型 常量名 = 值;
[public abstract] 返回类型 方法名(形参列表);
}
实现
[访问修饰符] class 类名 [extends 超类名] implements 接口名列表 {
类体
}
特性
接口中可以含有变量,变量会被隐式的指定为 public static final(用 private 修饰 会报编译错误)
接口中的方法会被隐式的指定为 public abstract
功能
- 接口提供了一组功能的命名集合
- 接口定义了不同类交互的标准
实现了“多继承” ;分离了方法的声明和方法的实现
接口 v.s. 类
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口只能包含static final成员变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
抽象类是对类抽象,而接口是对行为的抽象
抽象类是自底向上抽象而来的,接口是自顶向下设计出来的
接口名作为类型
可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量, 那么该接口变量就可以调用被类实现的接口的方法。
5. 类之间关系
6.UML图
其他
问题域指提问的范围、问题之间的内在的关系和逻辑可能性空间。