# 高级OOP
## 抽象类和接口
### 抽象类
描述抽象概念的类,不能被实例化,可以含有抽象方法
```java
// 抽象类
public abstract class ClassName{
// 抽象方法
public abstract Object doSomething(String arg);
}
```
### 接口
描述某种类能够做的事情
接口中不能有一般属性,接口中的成员“变量”都是public static final的
#### static
被static标记的变量、方法,不从属于某个对象,是某种类型共享的。不需要实例化后使用。翻译成“静态”
```java
public class Animal{
public static int something;
public static void doSomething(){
....
}
}
// 调用
int x = Animal.something;
Animal.doSomething();
```
#### final
被final标记的变量是常量
被final标记的方法不能被覆盖
被final标记的类不能被继承
### 抽象类和接口的相同和区别
相同点:都不能被实例化,必须要被继承或被实现
不同点:
抽象类表示是什么,接口表示能做什么
抽象类中可以有普通方法、属性、构造器
接口只能是公开的静态常量、公开的抽象方法、默认实现(1.8)
抽象类只能单继承,接口可以多实现
接口继承接口使用extends,可多继承
## 常用类
### java.lang.Object
所有类的父类
#### toString()方法
可以直接转换成String,通过System.out.println打印,便于调试
#### equals()和hashCode()方法
## 集合
### Wrapper类
装箱Boxing:基本数据类型转换成引用类型
拆箱UnBoxing:引用类型转换成基本数据类型
```java
int a = 10; Integer aa = 10; // 自动装箱 int bb = aa; // 自动拆箱 String str = "Hello"+10; // 广义上的装箱 String aStr = "10"; int x = Integer.parseInt(aStr); // 广义上的拆箱
```
byte Byte short Short int Integer long Long char Character boolean Boolean float Float double Double
### Collection
#### Set
元素不重复(equals为true即认为重复)
元素顺序和添加顺序无关
#### HashSet
顺序和Hash值有关
#### TreeSet
会有一个排序比较,元素必须实现Comparable接口,例如String类、Integer类
#### List
元素可以重复,元素顺序和添加顺序有关
#### ArrayList
使用最广
#### Vector
跟ArrayList类似,线程安全
#### 集合常用方法
```java
boolean add(E obj) // 添加元素 boolean remove(E obj) // 移除元素 boolean removeAt(int index) // 移除指定位置的元素 E get(int index) // 获取指定位置的元素 int size() // 获取集合大小 Stream stream() // 转换成流
```
### Map
key value存储
#### HashMap
key 和 value可以为null
#### Hashtable
key 和 value不可以为null 标签:int,接口,####,实训,0711,抽象类,public,### From: https://www.cnblogs.com/Chengjuice/p/18306282