Java基础复习(二) ——面向对象编程

上一章没有特意复习到类和对象,这一次单独复习一次。这些知识会是作为架构的基础,需要充分理解。

1.继承

继承的格式:关键字 extends ,默认所有类继承object

class 父类 { } 

 

class 子类 extends 父类 { }

为什么需要继承? 

因为相似的类会存在代码存在重复了,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组成 一个父类。

继承的类型: Java 不支持多继承,但支持多重继承。

Java基础复习(二) ——面向对象编程

 

implements关键字也具有继承的特性, 类继承接口的情况,可以同时继承多个接口。

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字:指向自己的引用。

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写

 

2.重写(Override)与重载(Overload)

重写(Override):子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重载(overloading) :是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

区别,例如下面的图:

区别点

重载方法

重写方法

参数列表

必须修改

一定不能修改

返回类型

可以修改

一定不能修改

异常

可以修改

可以减少或删除,一定不能抛出新的或者更广的异常

访问

可以修改

一定不能做更严格的限制(可以降低限制)

Java基础复习(二) ——面向对象编程

 

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.多态

多态就是同一个接口,使用不同的实例而执行不同操作,简单来说就是参数调用的时候是父类,但是实际使用的时候是子类的对象,所以最终会调用的是子类的方法。可能不太好理解,可以先看完重写、接口和抽象类在回来理解一下多态。

  • 继承

  • 重写

  • 父类引用指向子类对象 Java基础复习(二) ——面向对象编程

实现方式:重写、接口、抽象类和抽象 

6.封装

封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装的优点

1. 良好的封装能够减少耦合。

2. 类内部的结构可以*修改。

3. 可以对成员变量进行更精确的控制。

4. 隐藏信息,实现细节

 

7.包(package)

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用:

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

引用包关键字: import

设计包的时候,我们可以可以使用按功能分包