上一章没有特意复习到类和对象,这一次单独复习一次。这些知识会是作为架构的基础,需要充分理解。
1.继承
继承的格式:关键字 extends ,默认所有类继承object
class 父类 { }
class 子类 extends 父类 { }
为什么需要继承?
因为相似的类会存在代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类。
继承的类型: Java 不支持多继承,但支持多重继承。
implements关键字也具有继承的特性, 类继承接口的情况,可以同时继承多个接口。
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写
2.重写(Override)与重载(Overload)
重写(Override):子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) :是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
区别,例如下面的图:
区别点 | 重载方法 | 重写方法 |
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
3.抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
因为抽象类必须被继承,所以再设计阶段就要确定下来是否需要抽象类。
abstract 关键字:可以修饰类,也可以修饰方法,但是一定是抽象类的方法,子类必须实现它(除非子类自己也是抽象类)。
public abstract class Employee {
private String name;
private String address;
private int number;
public abstract double computePay();
//其余代码
}
4.接口
Interface关键字: 在JAVA编程语言中是一个抽象类型,是抽象方法的集合。
接口并不是类,类描述对象的属性和方法。接口则包含类要实现的方法。
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
public void eat();
}
抽象类和接口的区别
-
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
-
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
-
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
-
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口
接口可以继承接口,并且是多继承。
5.多态
多态就是同一个接口,使用不同的实例而执行不同操作,简单来说就是参数调用的时候是父类,但是实际使用的时候是子类的对象,所以最终会调用的是子类的方法。可能不太好理解,可以先看完重写、接口和抽象类在回来理解一下多态。
-
继承
-
重写
-
父类引用指向子类对象
实现方式:重写、接口、抽象类和抽象
6.封装
封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装的优点
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节
7.包(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
引用包关键字: import
设计包的时候,我们可以可以使用按功能分包