8.12 集訓(xùn)第十二天 【Java 接口&抽象類】

38℃/26℃ 熱skr人

今日目標(biāo)

學(xué)習(xí)接口和抽象類

學(xué)習(xí)內(nèi)容

1 接口

  • 接口可以解決java中的多重繼承問題

  • 接口 interface(定義一套方法 用于對象之間的通信)
    接口≠某一個(gè)物理存在的東西 VGA TypeC
    接口就是定義一套規(guī)則/規(guī)范

  • 接口的定義:

public interface pet{
void beFriendly(); }

使用“interface”來取代“class”
接口的方法一定是抽象的,沒有內(nèi)容
接口里面默認(rèn)的變量都是static final ,默認(rèn)情況下 不需要自己寫 public static final

  • 關(guān)于接口的好幾個(gè)"不能"
    接口里面不能定義變量 只能定義常量
    接口里面不能定義代碼塊
    接口里面不能定義構(gòu)造方法
    接口里面不能添加普通/對象/實(shí)例方法
    接口里面可以定義內(nèi)部類
    接口里面只能添加抽象方法,默認(rèn)就是public abstract(可以不打出來)

  • 接口的實(shí)現(xiàn):

public class Dog extends Canine implements Pet{
public void beFriendly(){...}}

implements關(guān)鍵詞后面跟著接口的名稱pet
\scriptsize一個(gè)類可以實(shí)現(xiàn)多個(gè)接口

class PXDClass implements testInterface,testInterface2{
    @Override
    public void test() {
        testInterface.inner in=new testInterface.inner();
        in.show();
    }
    @Override
    public void test2() {

    }
}

\scriptsize一個(gè)接口可以繼承多個(gè)接口

interface C extends A, B { }

2 抽象類

  • 抽象類 abstract->模板的作用(除了被繼承之外,是沒有用途、沒有值、沒有目的的),抽象的方法沒有內(nèi)容,只是為了標(biāo)記出多態(tài)而存在的

  • 抽象類里面定義使用這個(gè)功能就可以(選擇)實(shí)現(xiàn)的屬性或方法

public abstract void eat();
  • 抽象類不能初始化,實(shí)例化,不能創(chuàng)建抽象類的模板,可以使用extends來繼承一個(gè)抽象類,如果繼承一個(gè)抽象類,就必須實(shí)現(xiàn)抽象類里面的抽象方法,必須以相同的方法鑒名(名稱和參數(shù))和相同的返回類型創(chuàng)建出費(fèi)抽象的方法

  • 如果不實(shí)現(xiàn)抽象方法 也可以把這個(gè)類定義為抽象類,就算只有一個(gè)抽象的方法,此類也必須被標(biāo)記為抽象的

實(shí)際操作

package day12_demo;

public class Button {
    public static  void main(String[] args){

        //啟動(dòng)程序 創(chuàng)建界面
        MainActivity main =new MainActivity();

        //模擬觸摸
        main.touch();
    }
}
//管理界面的抽象類
public abstract  class Activity {
    //保存這個(gè)界面所有子視圖
   public ArrayList<View>childs=new ArrayList<>();

   //創(chuàng)建界面
    public abstract  void onCreate();

    //模擬觸摸
    public abstract void touch();

    //銷毀界面
    public  abstract  void onDestroy();

    //將子控件添加到當(dāng)前界面上
    //接受的時(shí)候是用父類去接收子類
    //當(dāng)需要訪問子類時(shí) 就要強(qiáng)制轉(zhuǎn)化為對應(yīng)的類
    public void addChild(View v){
     if(v instanceof Button1){
         Button1 btn=(Button1)v;
        System.out.println(btn.title+"按鈕顯示到界面上了");

     }
     if(v instanceof ImageView){
         ImageView iv=(ImageView)v;
         System.out.println(iv.picture+"的圖片顯示到界面上了");
     }
        //保存子類控件
        childs.add(v);
    }

}
public class View {
    //所有的視圖都有的屬性
    String backgroundcolor;
    String bordercolor;

    //記錄誰想監(jiān)聽這個(gè)事件
    //
    onClickListener listener;


    //所有的視圖都要監(jiān)聽事件
    //定義內(nèi)部接口 封裝
    public interface onClickListener{
        //定義一套規(guī)范(方法)約束外部使用這些方法來監(jiān)聽事件
       public  abstract void onClick(View v);

   }
   //用于控件接收觸摸事件
   public void getTouchEvent(){
        //調(diào)用監(jiān)聽者里面的onclick方法
        listener.onClick(this);
   }
}
//創(chuàng)建按鈕類
public class Button1 extends View {
String title;
String titleColor;


public Button1(String title,String titleColor){
    this.title=title;
    this.titleColor=titleColor;
}
}
//顯示一張圖片
public class ImageView extends View {
    String picture;
    public ImageView(String picture){
        this.picture=picture;
    }
}
//主界面
public class MainActivity extends Activity implements View.onClickListener{
    Button1 btn;
    ImageView img;
    public MainActivity(){

    //當(dāng)界面被創(chuàng)建 就調(diào)用這個(gè)方法
        onCreate();
    }
    @Override
    public void onCreate() {
        //主界面如何布局(添加按鈕 圖片)
        //按鈕
        btn=new Button1("分享","紅色");
        //圖片
        img=new ImageView("靈超");

        //將創(chuàng)建的控件添加到當(dāng)前界面
        addChild(btn);
        addChild(img);

        //1.如果一個(gè)控件需要監(jiān)聽事件那么就必須是實(shí)現(xiàn)監(jiān)聽事件的接口
        //告訴按鈕是誰在監(jiān)聽這個(gè)對象
        btn.listener= this;

        //2.
        //給imageView添加一個(gè)事件
        img.listener=new View.onClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("圖片被點(diǎn)擊了");
            }
        };
    }
    //模擬觸摸
    public  void touch(){
        //將屏幕觸摸的事件傳遞給按鈕
        btn.getTouchEvent();
        img.getTouchEvent();
    }
    @Override
    public void onDestroy() {
       //銷毀之前需要做的事
    }
    //當(dāng)事件觸發(fā) 就回來調(diào)用這個(gè)onclick方法
    @Override
    public void onClick(View v) {
    System.out.println("按鈕被點(diǎn)擊了");
    }
}

輸出:

分享按鈕顯示到界面上了
靈超的圖片顯示到界面上了
按鈕被點(diǎn)擊了
圖片被點(diǎn)擊了

心得體會

最近學(xué)習(xí)的內(nèi)容看似很散,其實(shí)它們都是相互關(guān)聯(lián)的,學(xué)習(xí)就像串糖葫蘆,把一個(gè)個(gè)知識點(diǎn)串起來,話雖這么說,真的好難
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容