1.什么是接口:
* 接口是方法的集合,而且接口中的方法全是抽象的
* 你可以把接口看成一個特殊的"抽象類",接口中的方法全是抽象的
*
*
* 2.java中怎么定義接口:
* 定義類的關鍵字:class
* 定義接口的關鍵字:interface
* 格式:
* public interface 接口名{
* //成員方法
* public abstract void demo01();
* public abstract void demo02();
* }
* 接口的方法 必須是public abstract 修飾,你可以不寫,也可以選擇性寫,但是不寫不代表沒有(我們建議寫)
*
* 3. 接口可以創建對象嗎?不可以創建對象,接口也是天生作為父類
*
* 4.類和接口的關系,叫做實現,類實現接口(繼承是類和類之間的關系,實現是類和接口的關系)
*
* 5.怎么實現: implements(實現的關鍵字) extends(繼承的關鍵字)
* a.一個類實現接口,這個類我們稱為接口的實現類
* b.一個類繼承抽象類,這個類我們稱為抽象類的子類
* 6.接口中成員的特點:
* a.所有的方法必須都是 public abstract修飾
*
* b.接口中成員變量必須由public static final 修飾
* 我們建議以上所有的修飾符都寫上
接口中成員的特點:
* 1.所有的方法必須都是 public abstract修飾
*
* 2.接口中成員變量必須由public static final 修飾
* 我們建議以上所有的修飾符都寫上
* 接口的一些特點:
*
* 1.類和類只能單繼承,類和接口可以多實現
*
* 2.接口和接口的關系叫做繼承,而且接口和接口可以多繼承
*
* 面試題:java中支持多繼承嗎?
* java類和類只能單繼承,但是可以多層繼承
* java接口和接口可以多繼承
*
* 3.一個類 繼承了另外一個類,同時實現了多個接口
* 偽代碼:
* public class 子類 extends 父類 implements 接口1,接口2...{
* //子類想要創建對象
* //1.重寫父類的抽象方法(可能有可能沒有)
* //2.重寫所有接口中所有抽象方法
* }
抽象類和接口的區別:
*
* 1.抽象類中只能定義 所有子類共性內容
*
* 2.接口中定義是整個繼承體系之外的方法
多態:[多種變態] 一個事物的多種形態
* 比如一個學生,你可以看成是學生,你可以看成是人
*
* 1.必須有繼承關系(或者實現關系)
* 2.必須有方法的重寫(但是不重寫 多態失去了意義)
* 3.在12前提下,多態的表現形式 父類的引用變量 指向了 子類的對象
* 接口的引用變量 指向了 實現類的對象
* AbstractB aa = new ClassB();
* InterA ia = new ClassA();
*
* 假設 abstract class Person{
* public abstract void sleep();
* }
* 1.繼承
* class Student extends Person{
* //2.重寫方法
* public void sleep(){
* ..
* }
* }
* 3.表現形式:
* 父類的引用變量 指向了 子類的對象
* Student s = new Student();//不是多態
* Person p = new Student();//就是多態
多態中的成員變量:(只和父類有關系)
* 1.編譯時:看父類
* 2.運行時:看父類
*
* 多態中的成員方法:
* 1.編譯時:看父類
* 2.運行時:看子類
*
* 總結:多態的成員變量只和父類有關,多態的成員方法編譯看父類運行時看子類
*
* 多態的好處和弊端:
*
* 1.弊端:只能調用子父類共有的方法,而不能調用子類特有的方法
*
* 2.好處:提高了程序的擴展性
* 案例:說明多態好處,提高了程序的擴展性
* 喂貓和狗的案例
* 1.抽取父類 (Animal)
* 2.貓狗繼承Animal,同時重寫抽象方法
* 多態的形式:
* 1.前提:
酒 a = 劍南春
酒 b = 五糧液
酒 c = 酒鬼酒
…
這里所表現的的就是多態。劍南春、五糧液、酒鬼酒都是酒的子類,
我們只是通過酒這一個父類就能夠引用不同的子類,這就是多態——
我們只有在運行的時候才會知道引用變量所指向的具體實例對象。
* a.必須有繼承關系(或者實現關系)
* b.必須有方法的重寫
* 2.表現形式
* 父類類型 變量名 = new 子類類型();
* 接口類型 變量名 = new 實現類類型();
*
* 多態的弊端和好處:
* a.只能調用子父類共有內容,不能調用子類特有的內容
* 多態的成員變量:編譯時看父類 運行時也看父類
* 多態的成員方法:編譯還是看父類,運行時看子類
* b.好處:提供程序擴展性,同時提高了代碼復用性
*
* 多態弊端的解決方案:(轉型方案)
* 1.向上轉型:(自動類型轉換)
* double d = 1;//打印出來的d不是1而是1.0
* Person p = new Student();//向上轉型
* Animal an = new Dog();//向上轉型
*
* 2.向下轉型(強制類型轉換)
* int i = (int)1.9;//打印i打印出來是1
* Person p = new Student();//多態
* Student s = (Student)p;//向下轉型
昨天知識回顧:
* 1.this和super的作用
*
* 2.方法重寫的概念
*
* 3.方法重寫的意義:增強了父類的功能
*
* 4.什么是抽象方法:
* 什么是抽象類:
*
* 5.抽象類存在的意義?
*
* 6.抽象類的抽象方法存在的意義?
*
* 補充:this(參數):
* super(參數):單一原則
*
*
*/
public class TestDemo {
public static void main(String[] args) {
C c = new C();//1.開辟空間 2.構造方法 3.返回地址
//構造方法:1:super() 2:初始化成員(賦值默認值) 3:進行后面的方法體
}
}
class A{
int x = 10;-
public A(){
super();
//初始化成員
showX();
}
public void showX(){
System.out.println(x);
}
}
class B extends A{
public B(){
super();
showX();
}
}
class C extends B{
public C(){
super();
//初始化
showX();
}
}
1.以前我們定義一個類的成員變量和成員方法的時候,以后我們是通過創建對象來調用這些成員的
*
* 2.定義一個類 CZStudent(學號,name,sex,school:就讀學校)
* static修飾成員變量:比如 : static String school
* 被static修飾的成員變量 不屬於某一個對象,它屬於這個類,但是有學生又共享這個變量
*
* 案例: 中國人類
* name.age,job,國籍
*
* 總結:被static修飾的成員變量,在內存中有一份,保存到靜態區
* 然后無論創建多少個對象,所有對象共享一份數據
* 所以說我們一般稱static修飾的成員變量 叫做類成員
*
* 3.被static修飾的成員的訪問方式:
* 成員變量:
* 對象名.static修飾的成員變量名;//不建議
* 類名.static修飾的成員變量名;//建議
* 成員方法:
* 對象名.static修飾的方法名();//不建議
* 類名.static修飾的方法名();
* 4.補充:被static修飾的成員 和 不被static修飾的成員相互訪問的問題
* 生命周期的問題:
* static修飾成員出現的早----->秦始皇(先人)
* 非static修飾的成員出現的晚---->我們(后人)