1.类
类是描述具体对象的代码。类说明了对象可以存储什么数据,对象可以执行哪些操作。
如果找不到自己所需要的类,那么可以创建类,
举个例子:创建Rectangle类
一个Rectangle(矩形)对象将有以下的属性:
属性length将存放矩形的长。
属性width将存放矩形的宽。
还会含有以下的一些方法:
setLength方法用于存储对象的长度。
setWidth方法用于存储对象的宽度。
getLength方法用于返回对象的长度值。
getWidth方法用于返回对象的宽度值。
getArea 方法返回矩形的面积。
用UML图表示Rectangle 类:
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。类可以创建自己的构造方法。一个类可以有多个构造(方法重载)。
构造方法有一些特性区别于一般的方法。
(1)构造方法和类有相同的名字。
(2)构造方法没有返回类型(甚至没有void )
(3)构造方法不返回任何值。
(4)构造方法一般是 public.
用UML表示构造方法:
2.继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
标识为private的基类成员:
不被派生类继承,
只有通过基类的public方法,派生类才可以访问它们。
标识为public(非private)的基类成员:
被派生类继承,
可以直接从派生类访问它们。
继承可以使用 extends 和 implements 这两个关键字来实现继承,当一个类没有继承的两个关键字,则默认继承object类。
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super 与 this 关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
3.多态
多态是同一个行为具有不同表现形式或形态的能力,即对象多种表现形式的体现,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
使用多态必须满足三个必要条件:继承、重写、父类引用指向子类。
使用多态的前提条件是必须有子父类关系。
多态体现为父类变量可以引用子类对象。
定义格式:父类类型 变量名=new 子类类型();
多态是继封装、继承之后,面向对象的第三大特性。
多态可以描述为一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
参考博客代码:
https://blog.csdn.net/zhangliangzi/article/details/50097179?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-15&spm=1001.2101.3001.4242
class Father {
public String name = "father";
//父类基本方法
public void fatherMethod()
{
System.out.println("父类的基本方法!");
}
//被子类覆盖方法
public void overrideMethod()
{
System.out.println("父类被子类覆盖方法!");
}
}
public class Child extends Father{
public String name = "child";
//子类基本方法
public void childMethod()
{
System.out.println("子类基本方法!");
}
//子类覆盖父类方法
public void overrideMethod()
{
System.out.println("子类覆盖父类方法!");
}
public static void main(String[] args)
{
//下面编译时类型与运行时类型相同,不存在多态
Father father = new Father();
System.out.println(father.name);
father.fatherMethod();
father.overrideMethod();
System.out.println();
//下面编译时类型与运行时类型相同,不存在多态
Child child = new Child();
System.out.println(child.name);
child.childMethod();
child.overrideMethod();
System.out.println();
//下面编译时类型与运行时类型不同,多态发生
//父类引用指向子类对象,多态发生条件齐全
//father2对象编译时类型是FatherClass,运行时类型是ChildClass
Father father2 = new Child();
//注意:与方法不同,对象的Field不具备多态性,下面输出的是父类的name
System.out.println(father2.name);
father2.fatherMethod();
//多态发生,此处调用的是子类重写的方法
father2.overrideMethod();
}
}
4.集合
集合类主要包括List链表、Set集合和Map映射等基本类型。
List链表是一种有序集合,也称为序列。该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
有两种常用的实现List接口的类:
ArrayList类,它善于随机访问元素,但是在链表中间插入和移除元素时比较慢;
LinkedList类,它通过代价较低的在链表中间进行插入和删除操作,但在随机访问方面相对比较慢,其特性集较ArrayList更大。
ArrayList类
ArrayList类是List接口可调整大小的数组实现。实现所有可选的List操作,并允许所有元素,包括null。除了实现List接口之外,此类还提供了一些方法来操作内部用于存储列表的数组的大小。
LinkedList也像ArrayList一样实现了基本的List接口。LinkedList还添加了可以使其用作栈、队列或双端队列的方法。
Set集合是继承于Collection的接口,它是一个不允许有重复元素的集合。Set中最常被使用的是测试归属性,可以很容易询问某个对象是否在某个Set中。
HashSet 和 TreeSet 是Set的两个实现类。
HashSet依赖于HashMap,HashSet中的元素是无序的,使用散列函数存储数据;
TreeSet依赖于TreeMap,TreeSet中的元素是有序的,将元素存储在红-黑树数据结构中。
HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。
TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。TreeSet中的元素支持2种排序方式,自然排序或者根据创建TreeSet时提供的 Comparator 进行排序。
Map是映射接口,Map中存储的内容是键值对(key-value)。Map映射中不能包含重复的键,每个键最多只能映射到一个值。
AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。
HashMap 继承于AbstractMap,但没实现NavigableMap接口。因此,HashMap的内容是“键值对,但不保证次序”。
TreeMap 继承于AbstractMap,且实现了NavigableMap接口。因此,TreeMap中的内容是“有序的键值对”。
HashMap继承于AbstractMap类,实现了Map接口。
TreeMap继承于AbstractMap,实现了Map接口。TreeMap是一个有序的key-value集合,它是通过红黑树实现的。