- 子類能夠繼承父類中被聲明為public和protected的成員變量和成員方法,但不能繼承被聲明為private的成員變量和成員方法
- 如果子類聲明了一個與父類的成員變量同名的成員變量,則子類不能繼承父類的成員變量,此時稱子類的成員變量隱藏了父類的成員變量,此時如果想在子類中訪問父類中被子類隱藏的成員方法或變量時,就可以使用super關鍵字
- 如果子類聲明了一個與父類的成員方法同名的成員方法,則子類不能繼承父類的成員方法,此時稱子類的成員方法覆蓋了父類的成員方法,此時如果想在子類中訪問父類中被子類隱藏的成員方法或變量時,就可以使用super關鍵字
- 方法重載時,方法的返回值類型不能作為區分方法重載的標志,方法的重載指的是出現多個方法名相同,但參數個數或參數類型不同的方法
- 子類不能覆蓋父類中聲明為final或者static的方法
- 子類必須覆蓋父類中聲明為abstract的方法(沒有實現的,在抽象類中創建的,必須要子類重寫的方法稱為abstract方法),或者子類也將該方法聲明為abstract(聲明了抽象方法的類也必須是抽象類)
- 抽象方法不能使用private 或static修飾
- 使用final修飾的類不能被繼承,不能有子類,使用final修飾的方法不能被重寫
- 內部類分為 成員內部類、局部內部類、靜態內部類、匿名內部類
成員內部類
public class Sample{
public int id;
class Inner{
}
}
每個java類文件中只允許存在一個public公共類
只有創建了成員內部類的實例,才能使用成員內部類的變量和方法
Sample sample=new Sample();
Sample.Inner inner=sample.new Inner();
局部內部類
public void sell(){
class Apple(){
}
}
局部內部類和局部變量一樣,都是在方法內定義的,其有效范圍只在方法內部有效
局部內部類可以訪問他的創建類中的所有成員變量和成員方法,包括私有方法
public class InnerClass {
private String name;
public InnerClass() {
name = "蘋果";
}
private void sell(int price) {
class Apple {
int innerPrice = 0;
public Apple(int price) {
this.innerPrice = price;
}
public void price() {
System.out.print("現在開始銷售:" + name);
System.out.print("單價為:" + innerPrice);
}
}
Apple apple = new Apple(price);
apple.price();
}
public static void main(String[] args) {
InnerClass inner = new InnerClass();
inner.sell(100);
}
}
現在開始銷售:蘋果單價為:100
Process finished with exit code 0
靜態內部類可以在不創建外部類的時候直接
匿名內部類可以繼承父類的方法,也可以重寫父類的方法
匿名內部類可以訪問外嵌類中的成員變量和方法,在匿名內部類中不能聲明靜態變量和靜態方法
interface Apple{
public void say();
}
public class Sample{
public static void print(Apple apple){
apple.say();
}
public static void main(String [] args){
Sample.print(new Apple(){
public void say(){
}
});
}
- 接口是一個特殊的抽象類,在接口中也可以定義abstract方法,接口中所有的方法都沒有方法體,
接口中有常量定義和方法定義兩部分
接口可以被繼承,接口可以實現多繼承
接口中不能定義靜態方法,抽象類中可以定義靜態方法
接口中只能定義靜態常量屬性,不能定義普通屬性,抽象類里可以定義靜態常量屬性,也可以定義普通屬性
接口不能包含構造器,抽象類可以包含構造器,抽象類里的構造器是為了讓其子類調用并完成初始化操作
接口不能包含初始化塊,抽象類可以包含初始化塊
一個類最多只能有一個直接父類,包括抽象類,但是一個類可以實現多個接口
public interface C extends interfaceA,interfaceB
- java中的接口回調指的是,把實現某一接口的類所創建的對象的引用賦值給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口方法,實際上,當接口變量調用被類實現的接口方法時,就是通知相應的對象調用這個方法
public interface People{
void say(String s);
}
class Teacher implements People{
@Override
public void say(String s) {
System.out.println(s);
}
}
class Student implements People{
@Override
public void say(String s) {
System.out.println(s);
}
}
class mainEducute{
public static void main(String[] args){
People people; //聲明接口變量
people=new Teacher(); //接口變量中存放對象的引用
people.say("我是老師"); //接口回調
people=new Student(); //接口變量中存放對象的引用
people.say("我是學生");//接口回調
}
}
- 異常
public class People {
public static int check(String strage) throws Exception{
int age=Integer.parseInt(strage);
if(age<0){
throw new Exception("年齡不能為負數");
}
return age;
}
public static void main(String[] args){
int myage= 0;
try {
myage = check("-101");
} catch (Exception e) {
System.out.println("數據邏輯錯誤");
System.out.println("原因:"+e.getMessage());
}
System.out.println(myage);
}
}
數據邏輯錯誤
原因:年齡不能為負數
0
- ==表示兩個對象的內存地址是否相等,equals表示兩個字符串是否相等
Collection接口
- containsAll()用來查看在該集合中是否存在指定集合中的所有對象,返回值為boolean型,如果存在返回true,不存在返回false
- retainAll()方法僅保留該集合中同時包含在指定集合中的對象,其他的全部移除,返回值為boolean,如果存在符合條件的對象則返回true,否則返回false
- removeAll()方法用來從該集合中移除同時包含在指定集合中的對象,與retainAll()方法正好相反,返回值為boolean型,如果存在符合移除條件的對象則返回true,否則返回false
- addAll()方法用來將指定集合中的所有對象添加到該集合
-
contains(Object obj)用來查看在該集合中是否存在指定的對象,返回值為boolean型,如果存在則返回true,否則返回false
微信截圖_20190412091722.png
List集合
- subList(int fromIndex,int toIndex) 通過截取從起始索引位置fromIndex(包含)到終止索引位置toIndex(不包含)的對象,重新生成一個List集合返回
- set(int index,Object obj) 用來將集合中指定索引位置的對象修改為指定的對象
- indexOf(Object obj)用來獲取指定對象的索引位置,當存在多個時,返回第一個索引位置,不存在返回-1
- lastIndexOf(Object obj)用來獲得指定對象的索引位置,當存在多個時,返回最后一個的索引位置,當不存在時返回-1
add(int index,Object obj)用來向集合指定的索引位置添加對象,其他對象的索引位置相對后移一位,索引位置從0開始
addAll(int,Collection coll)用來向集合的指定索引位置添加指定集合中的所有對象
List為線性方式存儲對象,ArrayList實現了List接口,采用數組結構保存對象,索引查詢效率高,增刪效率低
LinkedList采用鏈表結構保存對象,插入和刪除效率高,查詢效率低
LinkedList 定義的常用方法
- addFirst(E obj)
- addLast(E obj)
- getFirst()
- getLast()
- removeFirst()
- removeLast()
HashSet
hashSet實現的set集合不允許元素重復,根據對象的哈希碼確定對象的位置,所以添加到由HashSet類實現的set集合中的對象,還需要重新實現hashCode()方法,從而保證插入集合中的對象能夠合理的分布在集合中,以便快速定位集合中的對象
TreeSet
treeSet遍歷對象是按照自然順序遞增排列,所以存入由treeSet類實現的Set集合的對象必須實現Comparable接口,也可能是按照指定比較器遞增排列