1、类

类:类是一个模板,它描述一类对象的行为和状态。
比如:一个圆形类,描述着某一类的对象,将圆形的行为和状态封装在类中。
我们可以将一类圆形公共的特征都封装在圆形类中,比如,圆都有半径,有圆心,我们称这些状态为类的属性,而行为通过方法来体现,比如要获得圆的半径和周长。

一个类可以包含以下类型变量:

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。

2、继承

继承的概念

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

比如动物类是父类,而食草动物和食肉动物是它的子类

所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
比如食草动物是一个动物,食肉动物是一个动物,符合这种is-a的关系
虽然都属于动物,但是子类与父类还是不同的,子类有他特定的方法和属性。
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的

我们为什么需要继承?

代码重复
代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错)

继承类型


继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

implements关键字

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

super 与 this 关键字

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

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

final关键字

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

3、多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

多态存在的三个必要条件

继承
重写
父类引用指向子类对象:Parent p = new Child();

## 2、多态的现实中的例子
鸟是一只鸟,猫是一只猫。
同样鸟是一只动物,猫也是一只动物。

3、多态的转型

向上转型和向下转型

4、举例说明

分别创建三个类,一个Animal类、Cat类、Bird类


在这里animal类为Bird和Cat的父类
Animal类如下

有私有属性 name和type,方法move
Cat类如下

Bird如下

5、多态语法

父类型的变量引用子类型的对象
在上述例子中:
Animal animal1=new Cat(" “,” “);
Animal animal2=new Bird(” “,” ");

6、详解

A、动物类里有的属性以及方法是整个动物大体拥有的,但是子类有一些属性和方法是特有的,这时候怎么办?
比如上面的例子,动物类的move,我们定义父类是输出move,但是鸟类是fly,我们可以通过重写父类中的方法把动物类的move输出“fly”。


因此我们在创建了两个动物类型引用猫和鸟对象变量之后,我们的方法输出的是各自重写后的方法。

多态是向上转型的,将子类对象向上转型成父类型,这个过程不用强制转换。

B、如果我们想猫可以飞,给他添加了一个特有的方法,我们怎么去调用呢?
我们知道如果用父类型去引用子类型变量的话,是无法调用子类型特有的方法的,我们只能通过向下转型来实现。

只有这样才能调用猫类的fly方法
向下转型必须强制类型转换,并且向下转型是不安全的。

7、总结

面向对象三大特性的多态,总而言之,是将父类型变量引用子类型对象,也是现实事物的一种代码实现。更多地了解现实中的例子能够更好理解多态。

4、Java 集合框架


接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象

实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。

算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

集合接口

集合框架定义了一些接口。本节提供了每个接口的概述:
序号 接口描述

1 Collection 接口

Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
Collection 接口存储一组不唯一,无序的对象。

2 List 接口
List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
List 接口存储一组不唯一,有序(插入顺序)的对象。

3 Set
Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。
Set 接口存储一组唯一,无序的对象。

4 SortedSet
继承于Set保存有序的集合。

5 Map
Map 接口存储一组键值对象,提供key(键)到value(值)的映射。

6 Map.Entry
描述在一个Map中的一个元素(键/值对)。是一个 Map 的内部接口。

7 SortedMap
继承于 Map,使 Key 保持在升序排列。

8 Enumeration
这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。

更多推荐

java程序设计-期末大作业(参考菜鸟教程)