java基礎第七篇之接口


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修飾的成員出現的晚---->我們(后人)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM