抽象類,接口2019-08-12

目的:

抽象類和接口的大量使用是Java語言的一個重要部分,今天通過講-練-將的方式學(xué)習(xí)和練習(xí)了抽象類和接口。

技術(shù):

1.抽象類:

抽象類 abstract
起模板的作用 作為模具
抽象類里面定義使用這個功能就可以選擇實現(xiàn)的方法和屬性
抽象類不能實例化 不能創(chuàng)建抽象類的對象
eg:

(1).定義一個抽象類 管理學(xué)習(xí)Android開發(fā) 文檔開發(fā)規(guī)定抽象類類名已ABStract或Base開頭
abstract class BaseAndroidStudy{

    //定義一個代碼塊
    {
        System.out.println("鍛煉身體");
    }

    //定義一個屬性 用于保存數(shù)據(jù)
    public String  javaBook;
    public Dream dream;

    public BaseAndroidStudy(){};

    public BaseAndroidStudy(String javaBook,String dream){
        this.javaBook = javaBook;
        this.dream = new Dream();
        this.dream.name = dream;
    }

    //定義一個靜態(tài)常量
    public static final String CBOOK = "C Primer";

   //定義一個抽象方法 不需要實現(xiàn) 由子類實現(xiàn)
    public abstract void study();

    //定義一個普通方法 已經(jīng)確定了這個方法的具體實現(xiàn)
    public void javaStudy(){
        System.out.println("參加培訓(xùn)");
    }

    //定義一個內(nèi)部類 用于管理每個人的夢想
    private class Dream{
        public String name;

        public void show(){
            System.out.println("我的夢想是:"+name);
        }
    }

}
(2).使用子類繼承這個抽象類,并實現(xiàn)抽象類中的所有程序方法:

使用extends來繼承一個抽象類
如果繼承一個抽象類 就必須實現(xiàn)抽象類里面的所有抽象方法
如果不實現(xiàn)抽象方法 也可以把這個類定義為抽象類(一般沒必要)

class Student extends BaseAndroidStudy{
    String name;

    @Override
    public void study(){
        System.out.println("看書,看視頻學(xué)習(xí)");
    }

    public Student(String name,String bookname,String dream){
        super(bookname,dream);
        this.name = name;
    }

}
(3).調(diào)用(可分為顯性調(diào)用和隱形調(diào)用,各有優(yōu)點):
public class Myclass {
    public static void main(String[] agrs){

        //方法1.顯示地創(chuàng)建一個類繼承于抽象類 創(chuàng)建這個類的對象 可定義多個變量
        Student xw = new Student("小王","java編程思想","名企offer");
//        BaseAndroidStudy xw = new Student("小王","java編程思想","名企offer");

        //方法2.使用匿名類  只使用一次
        BaseAndroidStudy zs = new BaseAndroidStudy("java編程","offer") {
            @Override
            public void study() {
                System.out.println("培訓(xùn)");
            }
        };
    }
}

2.接口:

接口 interface 定義一套方法 用于對象之間的通信
不要把接口理解為某一個1物理存在的東西
接口就是定義一套規(guī)范/規(guī)則

如果需要定義已經(jīng)有實現(xiàn)的方法
使用default

eg:

(1).用interface定義一個接口

接口里面默認的變量都是static final 變量
默認情況下不需要自己寫public static final
接口里面:
不能定義變量
不能定義代碼塊
不能定義構(gòu)造方法
不能添加普通/對象/實例方法
接口里面可以定義內(nèi)部類

接口里面只有抽象方法 默認為public abstract

一個接口可以繼承多個接口
例: interface text extends text2,text3 { }

interface testInterface{
    int I =100;  //public static fianl已默認為 不需要寫
    int COUNT = 20;

    void text();
    void text2();

    class inner{
        int name;
        public void show(){
            System.out.println("內(nèi)部類");
        }
    }
}
(2).用implements實現(xiàn)一個接口:

一個類可以實現(xiàn)多個接口 用','隔開
例:class PXDClass implements testInterface,textInterface2{ ……}

class PXDClass implements testInterface{

    @Override
    public void text(){
        inner inner = new inner();
        inner.show();
    }

    @Override
    public void text2() {
        System.out.println("接口方法2");
    }
}
(3).調(diào)用:

創(chuàng)建:
PXDClass pxd = new PXDClass();
testInterface t = new PXDClass();

class Te{
    public static void main(String[] agrs){

        PXDClass pxd = new PXDClass();
        testInterface t = new PXDClass();

        pxd.text();
        t.text2();

    }
}

實際編寫:

要求:
}4QV0N7~4)@ZJBP}Y2VY~1J.png

具體實現(xiàn):

1.創(chuàng)建Activity(模板)抽象類:
  • 什么時候需要將一個父類做成抽象類
  • 1.不能直接創(chuàng)建這個類的對象
  • 2.這個類里面的某些方法 還不確定如何實現(xiàn)
import java.util.ArrayList;

/**
 * 管理界面的抽象類 調(diào)用一個界面創(chuàng)建到結(jié)束的模板
 */
public abstract class Activity {
    //保存這個界面的所有子視圖
    ArrayList<View> child = new ArrayList<>();

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

    //界面結(jié)束
    public abstract void onDestroy();

    //將子控件添加到當(dāng)前界面
    //接收時用父類去接收子類
    //當(dāng)需要訪問子類內(nèi)容的時候 就要強制轉(zhuǎn)換為對應(yīng)的類型
    public void addChild(View view){
        if( view instanceof Button){
            Button button = (Button)view;
            System.out.println(button.title+"按鈕顯示到界面上了");
        }else{
            ImageView imageView = (ImageView)view;
            System.out.println(imageView.picture+"圖片被顯示到界面上了");
        }
       //保存子類控件
        child.add(view);
    }
}
2.創(chuàng)建View類管理視圖的顯示和監(jiān)聽事件:

類里面定義一個接口,很好地實現(xiàn)封裝性

/**
 * 管理一個視圖顯示和事件監(jiān)聽
 */
public class View {
    //所有視圖的共有屬性
    String backGroundColor;
    String borderColor;

    //記錄誰想監(jiān)聽我這個事件
    //暫時我還不知道誰要監(jiān)聽
    //但是監(jiān)聽的人肯定實現(xiàn)了這個接口
    OnClickListener listener;

    public interface OnClickListener{
        //定義一套方法 約束外部使用這些方法來監(jiān)聽事件
        void onClick(View view);
    }

    //用于控件接收觸摸事件
    public void getTouchEvent(){
        //調(diào)用監(jiān)聽者里面的onClick方法
        listener.onClick(this);
    }
}
(3)創(chuàng)建主界面MainActivity:
/**
 * 主界面 (程序運行起來第一個界面)
 */
public class MainActivity extends Activity implements View.OnClickListener {

    @Override
    public void onCreate() {
        //主界面如何布局
        //添加一個按鈕
        //添加一個圖片
   }
  
    @Override
    public void onDestroy() {
        //程序結(jié)束前應(yīng)做點什么

    }
}
(4)創(chuàng)建按鈕類和圖片類:
public class Button extends View {
    String title;
    String titleColor;

    public Button(String titleColor, String title){
        this.title = title;
        this.titleColor = titleColor;
    }

}
public class ImageView extends View{
    String picture;

    public ImageView(String picture){
        this.picture = picture;
    }

}
(5)實現(xiàn)MainActivity具體內(nèi)容:

在主界面添加按鈕和圖片
將創(chuàng)建好的控件添加到界面上
事件監(jiān)聽(MainActivity實現(xiàn)接口 == MainActivity需要監(jiān)聽事件)
使用顯性和匿名添加事件監(jiān)聽器
添加方法 模擬手觸屏

/**
 * 主界面 (程序運行起來第一個界面)
 */
public class MainActivity extends Activity implements View.OnClickListener {

    Button button;
    ImageView imageView;

    //構(gòu)造方法 使一創(chuàng)建界面時就運行onCreate方法
    public MainActivity(){
        onCreate();
    }

    @Override
    public void onCreate() {
        //主界面如何布局
        //添加一個按鈕
        button = new Button("紅色","按鈕");

        //添加一個圖片
        imageView = new ImageView("哪吒");

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

        //1.如果一個按鈕要監(jiān)聽事件 那么就必須要實現(xiàn)監(jiān)聽事件的接口
        //告訴按鈕時誰要監(jiān)聽這個事件
        button.listener = this;

        //2.匿名
        //給imageView添加一個事件
        imageView.listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.out.println("圖片被點擊了");
            }
        };

    }

    //用于控件接收觸摸事件
    public void touch(){
        button.getTouchEvent();
        imageView.getTouchEvent();
    }

    @Override
    public void onDestroy() {
        //程序結(jié)束前應(yīng)做點什么

    }

    @Override
    public void onClick(View view) {
        System.out.println("按鈕被點擊了");
    }
}
(6)運行:
public class Myclass {
    public static void main(String[] args){
        //啟動程序
        MainActivity mainActivity = new MainActivity();

        //模擬觸摸
        mainActivity.touch();


    }
}

運行結(jié)果:

按鈕按鈕顯示到界面上了
哪吒圖片被顯示到界面上了
按鈕被點擊了
圖片被點擊了

心得:

每次安排編程任務(wù)時自己都有一些思路,可就是寫不出來呀,不知道從哪里寫,怎樣開始寫,講解時有一種恍然大悟的感覺,同時也了解自己思路的不足,果真是東哥的代碼要高級點,哈哈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目的 學(xué)習(xí)抽象類,理解其具體表現(xiàn)與其他類的區(qū)別,掌握其寫法;了解匿名類,明白其具體表現(xiàn)與適用方法;開始學(xué)習(xí)與掌握接...
    董浩叔叔說你好啊閱讀 324評論 0 1
  • 1 抽象類和接口簡介1.1 抽象類1.1.1 一個小案例我們先來看這樣一個案例:世界上有許許多多不同種類的動物,每...
    走丟的小英俊閱讀 719評論 3 2
  • 你很清楚的知道什么時候用抽象類,什么時候用接口么?p.s. 多文字預(yù)警! 1 抽象類和接口簡介 1.1 抽象類 ...
    Sharember閱讀 2,427評論 9 55
  • 一、抽象類(abstract class) 1. 定義:如果一個類沒有包含足夠多的信息來描述一個具體的對象,這樣的...
    凌云struggle閱讀 1,022評論 0 1
  • 2019年7月15日 星期一 晴 能量中心建成了,所有法人都被召集集體打掃衛(wèi)生,為開業(yè)慶典做準(zhǔn)備。 早上開完YY,...
    Flora_Hu閱讀 462評論 7 4

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