文章目录
- [Java 继承](#Java 继承)
 - 重写(Override)与重载(Overload)
 - 
- [重写 Override](#重写 Override)
 - [重载 Overload](#重载 Overload)
 
 - [Java 多态](#Java 多态)
 - Java抽象类
 - [Java 封装](#Java 封装)
 - Java接口
 - [Java 枚举(enum)](#Java 枚举(enum))
 - Java包(package)
 - 数据结构
 - Java集合框架
 - [Java ArrayList](#Java ArrayList)
 - [Java LinkedList](#Java LinkedList)
 - [Java HashSet](#Java HashSet)
 - [Java HashMap](#Java HashMap)
 
部分示例代码来自 菜鸟教程
Java 继承
子类继承父类的特征和行为。
            
            
              java
              
              
            
          
          class 父类{
}
class 子类 extends 父类{
}
        继承的特性
- 范围:子类拥有父类非private的属性、方法。
 - 子类可以用自己的方式实现父类的方法。
 - Java不支持多继承,但支持多重继承。
 - 提高了类之间的耦合性。(算是缺点)
 
继承关键字
extends/implements
- extends 继承类,只能单继承
 - implements 继承接口interface,可以多继承 implements A,B
 - super 访问当前对象父类成员 super.
 - this 指向自己的引用 this.
 - final 最终的,声明类则为最终类不能被继承,修饰方法则不能被子类重写。
 
构造器
子类不继承父类的构造器,只调用(可隐式)。
若父类构造器带参数,则必须显式调用,通过super(A,B)传参。
重写(Override)与重载(Overload)
重写和重载是Java多态性的不同表现。重写是父类和子类之间多态性的表现。重载是一个类的多态性表现。
重写 Override
子类中定义了一个与父类中方法名称相同、参数列表相同、返回类型一般相同的方法,子类方法的实现覆盖了父类方法的实现。
重写规则
- 返回类型在java7后可以不同,但必须是父类返回值的派生类。
 - 子类访问权限只高不低。
 - 子类父类是否在同一个包中,会影响能够重写方法的范畴。
 - static的方法不能被重写,但能够被再次声明。
 - 构造方法不能被重写。
 - 重写方法不能抛出更宽泛的强制性异常,非强制性异常则可以随意抛出。
 
重载 Overload
在同一个类中,方法名字相同,参数列表不同(参数的数量、类型、顺序)。返回类型随意。
不同类中也可以存在重载,子类可以重载父类的方法。
Java 多态
同一个行为具有多个不同表现形式或形态的能力。
同一个接口使用不同的实例执行不同操作。
虚函数
虚函数的存在是为了多态。
Java里的普通函数就相当与C++的虚函数。
final才是非虚函数。
多态的实现方式
- 重写
 - 接口
 - 抽象类和抽象方法
 
Java抽象类
abstract 关键字声明
不能实例化对象的类,必须被继承才能被使用。
抽象方法
只声明,没有定义,方法名后直接分号。
- 有抽象方法的类必定是抽象类
 
Java 封装
用private修饰属性,用getter和setter提供访问接口。
Java接口
Intereface是抽象方法的集合。
接口特性
- 接口中的方法是隐式抽象的,public abstract
 - 接口中的变量则隐式为,public static final
 - 接口中的方法不能在接口中实现。
 
抽象类和接口的区别
- 一个类可以继承多个接口,但只能继承一个抽象类。
 - 抽象类的成员变量可以是各种类型的。
 - 抽象类可以有静态方法。(JDK1.8之后接口也可以)
 - 抽象类可以有方法体。(JDK1.8之后接口也可以)
 
接口的继承
- extends 接口继承接口,允许多继承
 - implements 类继承接口,允许多继承
 
标记接口
没有包含任何方法的接口。
只是为了给类做标记。
两种目的:
- 建立一个公共的父接口
 - 向一个类添加数据类型
 
Java 枚举(enum)
一个特殊的类,其中的枚举值都是public static final的。
            
            
              java
              
              
            
          
          enum Color 
{ 
    RED, GREEN, BLUE; 
} 
  
public class Test 
{ 
    // 执行输出结果
    public static void main(String[] args) 
    { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
    } 
}
//RED
        values()返回全部值
oedinal()返回索引
valueOf()返回指定字符串值的枚举常量
            
            
              java
              
              
            
          
          enum Color 
{ 
    RED, GREEN, BLUE; 
} 
  
public class Test 
{ 
    public static void main(String[] args) 
    { 
        // 调用 values() 
        Color[] arr = Color.values(); 
  
        // 迭代枚举
        for (Color col : arr) 
        { 
            // 查看索引
            System.out.println(col + " at index " + col.ordinal()); 
        } 
  
        // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException 
        System.out.println(Color.valueOf("RED")); 
        // System.out.println(Color.valueOf("WHITE")); 
    } 
}
        枚举类成员
可以有自己的变量、方法和构造函数。
构造函数会在调用时实现n次(n为枚举常量个数)
Java包(package)
类似于文件夹,用于区别类的命名空间。
把相互联系的【类、接口、枚举、注释】组织在同一个包中。
---------------------------------------------以上为面向对象部分---------------------------------------------------
数据结构
数组(Arrays)
插入和删除元素相对慢。
            
            
              java
              
              
            
          
          int[ ] array = new int[5];
        列表(Lists)
- Arraylist
动态数组,快速尾部插入 
            
            
              java
              
              
            
          
          List<String> arrayList = new ArrayList<>();
        - LinkedList
双向链表 
            
            
              java
              
              
            
          
          List<Integer> linkedList = new LinkedList<>();
        集合(Sets)
用于存储不重复的元素
- HashSet
无序集合,基于HashMap实现。 
            
            
              java
              
              
            
          
          Set<String> hashSet = new HashSet<>();
        - TreeSet
基于红黑树实现,不允许重复元素。自动排序。 
映射(Maps)
用于存储键值对
- HashMap
哈希表 无序 - TreeMap
红黑树 有序 
栈 (Stack)
LIFO后进先出
            
            
              java
              
              
            
          
          Stack<Integer> stack = new Stack<>();
        队列(Queue)
FIFO先进先出
- LinkedList
 - PriorityQueue
 
堆(Heap)
优先队列的基础,可实现最大堆和最小堆。
树(Trees)
TreeNode类型
图(Graphs)
Java没有内建的图类
其他
枚举Enumeration
位集合BitSet
向量Vector
动态数组
字典Dictionary
一个抽象类,键值对
哈希表HashTable
属性Properties
Java集合框架
没看进去,暂时跳过
Java ArrayList
Java LinkedList
链表
- 单向链表
 - 双向链表
 
Java HashSet
- 基于HashMap,不允许有重复元素
 - 允许有null
 - 无序
 - 不是线程安全的
 - 实现了Set接口
 
方法
- add
 - contains
 - remove
 - clear
 - size
 
Java HashMap
散列表,键值对映射
实现了Map接口。
方法
- put(key,value)
 - get(key)