day04-面向對象【內部類、static、包、訪問修飾符、final】

1.接口

是一個比抽象類還抽像的類,使用interface關鍵詞定義。
裏面只能定義抽象方法和常量;
不能new ,不能創建對象;

使用:
    1.定義接口的實現類:
        修飾符 calss 類名 implements 接口名{
            實現接口中所有的方法;
            }
    2.創建實現類的對象;
    3.通過實現類對象調用實現類方法;

2.多態

父類類型的變量只想子類的對象;

格式:
    父類名 對象名 =new 子類名(參數列表);

    在重寫變量過着方法的情況:
        1.如果重寫了方法,通過多態訪問時,訪問子類中的方法;
        2.如果重寫了變量,通過多態訪問變量時,訪問父類的變量;

3.static 關鍵字

靜態的意思;
使用修飾這個類的,所有對象的共享數據的,它屬於類,不屬於某一個對象,只有一個對象修改了這個數據,就會影響到其他對象的使用;

訪問方式:
    1.通過對象名來訪問:
        格式:對象名.靜態成員;
    2.靜態的訪問方式:
        格式: 類名.靜態成員;

    推薦使用第二種訪問方式;

4.靜態代碼塊

格式:
    static{
        靜態代碼;
    }
靜態代碼塊會在以任何方式第一次使用這個類時,被執行,而且是最先被執行,而且只執行一次。

特點:
    1.優先於構造方法被執行;
    2.只能被執行一次;
    3.靜態代碼塊優先於靜態方法被執行;
應用場景:
    通常用於初始化靜態變量,保證這些變量只能被賦值一次;

5.final 關鍵字

是最終的。不可修改的;
final 可以修飾類,方法,變量;
1.final修飾類:
    格式:修飾符 final class 類名{。。。};
    特點:被final修飾的類是不能被繼承的。
2.final修飾變量:
    格式:修飾符 final 返回值類型 方法名(參數列表){
                方法體;
                renturn 返回值;
            }
    特點:被final修飾的方法是不能被重寫的;
3.final修飾變量:
    格式: 修飾符 final 數據類型 變量名=初始值;
    特點: 被final修飾的變量的值不能被改變,其實就是常量;

6.包

是用來存儲class文件的文件夾,可以使用這些文件夾管理你的程序文件;
在項目中如何分包:
    先創建一個最頂層的包:
        公司域名的反寫.項目英文名稱的縮寫;
        例如: cn.itcast.oa;
1.按照功能模塊的名稱分包:


        按照功能模塊名稱創建不同的包:
            cn.itcast.oa.user
            cn.itcast.oa.email
            cn.itcast.oa.permission
            ...
2.按照程序文件的類型分包:

        cn.itcast.oa.web
        cn.itcast.oa.service
        cn.itcast.oa.service.impl
        cn.itcast.oa.dao
        cn.itcast.oa.dao.impl
        cn.itcast.oa.utils
        ... 


推薦使用第二種方式分包;

導包:

    關鍵字import.
    當使用到的類與當前類不在同一個包下,而且不在java.lang.

7.訪問權限修飾符

用來限制類,方法,變量的訪問範圍的。

public(公共的,共用的)-protected(受保護的)-default(默認的)-private(私有的)
從左到右權限依次變小;

1.被public修飾的類,方法,變量,在任何類中都可以訪問;
2.被private修飾的變量和方法只能在本類中訪問;

8.內部類

如果B類是定義在A類的裏面,就把B類叫做內部類;

分類:
    成員內部類;
    局部內部類;
class A{

    public String name;

    // 寫在了成員的位置
    // 成員內部類
    class B{
        B類自己的代碼;
    }

    public void method01(){
        ....
    }

    public void method02(){
        ....
        int a = 100;
        int b = 200;
        // 局部內部類
        class C{
            C類自己的代碼;
        }
    }
}

9.成員內部類

格式:
    class 外部類{
        成員變量;

        //寫在了成員的位置
        //成團內部類;
        class 內部類{
            內部類自己的代碼;
        }
        成員方法;
    }

使用內部類的格式:
    外部類.內部類  內部類對象=new 外部類().new 內部類();
    內部類對象.內部類的成員;

    在外部類中是把內部類作爲一個成員來使用的。

    例如:
        Outer.Inner inner=new Outer().new Inner();

10.局部內部類

格式:
    class 外部類{
        成員變量;
        public void method(){
            內部類自己的代碼;
            }
        }
    }
由於局部內部類是定義在方法裏面的,所以它的使用範圍僅限於這個方法內部;

11.匿名 內部類對象

創建了一個內部類的對象,沒又給它取名字,那麼這個對象就叫匿名內部類對象;

格式:
    public class Fu{
        ....
    }
    public class test{
        ...
        public void method(){
            //通過父類的構造方法創建子類對象,然後賦值給父類類型的變量:多態;
            Fu f=new Fu(){
                //重寫父類中的方法
            };
        }
    }

示例代碼:
package pack15_innerclassobject;

public class InnerObjectDemo {

public static void main(String[] args) {

    // 多態
     Fu f = new Zi();
     f.method01();

// 匿名內部類對象
// 匿名內部類對象調用結束後,會被垃圾回收期立即回收,釋放它佔用的內存空間
            // 這樣可以節省內存空間
    new Fu(){
    // 重寫父類中的方法method01
    @Override
    public void method01() {
    System.out.println("--Zi-----method01------------");
            }
        }.method01();

    // 創建一個匿名內內部類對象,然後給它取個名字叫f2
        Fu f2 =new Fu(){
        // 重寫父類中的方法method01
            @Override
            public void method01() {
    System.out.println("--Zi-----method01------------");
            }
    };

    f2.method01();
    System.out.println(f2.a);

    // 相當於下面的一行代碼;
    // new Zi().method01();

System.out.println("====程序還沒有結束===========");
        }
}

匿名內部類對象的使用場景:
    在整個項目中只有一個地方使用這個對象時,才把這個對象定義爲匿名內部類對象。

12.練習題
1.類名座位方法參數類型或者返回值類型

    /*
     * 定義方法時,如果參數的類型爲類名類型的;
     * 當調用方法時,需要給方法傳遞這個類的對象;
     */
    public static void  setPerson(Person p){
        p.age = 30;
        p.name="鼕鼕";

        System.out.println(p.age);
        System.out.println(p.name);
    }

    /*
     * 定義方法時,如果方法的返回值類型爲類名類型的;
     * 當給這方法返回數據時,必須返回這個類的對象;
     */
    public static Person getPerson(){
        Person p = new Person();
        p.age = 25;
        p.name="蓉蓉";
        return p;
    }


2.抽象類類名作爲方法參數類型或者返回值類型

3.接口名作爲方法參數類型或者返回值類型

    USB usb = new Mouse();
    public void useUSB(USB usb){
        usb.open();
    }

    public USB getUSB(){
        // USB usb = new  Mouse();
        Mouse m = new Mouse();
        return m;
    }
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 1940
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章