筆記四 Java 面向對象(1)

筆記四 Java 面向對象(1)

1.基本定義

1.1

Class

  • 事物、邏輯、算法概念抽象
  • 描述一類對象的 行爲和狀態
package note4;

/**
 * @author Calvin
 * @titile: 人類
 * @date 2019/2/20
 * @since 1.0
 */
public class Person {

    /**
     * 狀態 -> 屬性
     */
    private String sleepState = "睡覺中";

    /**
     * 行爲 -> 方法
     */
    public void sleep(){
        System.out.println("人會睡覺");
    }
}

對象 Object

  • 對象是類的 一個實例
package note4;

/**
 * @author Calvin
 * @titile: 小明
 * @date 2019/2/20
 * @since 1.0
 */
public class XiaoMing {

    public void personBehavior() {
        /**
         * 對象 -> 類的一個實例
         */
        Person person = new Person();
        person.sleep();
    }

}

引用 Reference

  • 使用標識符 指向一個對象的“引用(reference)”
    /**
     * @param person -> 根據person -> 引用Person
     */
    public void setPerson(Person person){
       this.person = person;
    }

構造方法 Construction

  • 在創建一個對象的時候, 至少有一個構造方法.

  • 構造方法的 名稱必須與 類同名一個類可以有多個構造方法.

public class XiaoMing {
    
    private Person person;

    /**
     * 構造方法
     */
    XiaoMing(){
        
    }

    /**
     * 帶參構造方法
     */
    XiaoMing(Person person){
        this.person = person;
    }
}    

this

  • 使用方式:當前對象的調用
    public void setPerson(Person person){
        
        // this  -> XiaoMing 中的屬性 
        // 將傳入person的值 -> 賦值給 XiaoMing 中的屬性 person
       this.person = person;
    }

方法重載

  • 使用方式:同名不同參
package note4;

/**
 * @author Calvin
 * @titile: 人類
 * @date 2019/2/20
 * @since 1.0
 */
public class Person {

    /**
     * 狀態 -> 屬性
     */
    private String sleepState = "睡覺中";

    /**
     * 行爲 -> 方法
     */
    public void sleep(){
        System.out.println("人會睡覺");
    }

    /**
     * 方法重載
     */
    public void sleep(String sleepState){
        System.out.println(sleepState);
    }
}

1.2

抽象類 abstract

  • 作用:

    • 子類提供 通用代碼
    • 子類提供 通用方法的定義
package note4;

/**
 * @author Calvin
 * @titile: 動物 (抽象類)
 * @date 2019/2/20
 * @since 1.0
 */

/**
 *extend
 */
public abstract class Animal {


    /** a.爲子類提供通用代碼**/
    /** 姓名 */
    private String name;
    /** 性別*/
    private String sex;

    /**b.爲子類提供通用方法的定義 **/
    /**
     * 動物有什麼行爲
     * @return
     */
    public abstract String behavious();
}

最終 final

  • 定義: 最終變量,不可改變
  • 作用:修飾 變量、方法、類
package note4;

/**
 * @author Calvin
 * @titile: 公🐕
 * @date 2019/2/20
 * @since 1.0
 */


/**
 * final -> 修飾 類、變量、方法
         -> 最終變量不可以修改
 */

// 修飾 類
public final class Dog extends Animal{

    // 修飾 變量
    final String SEX = "MALE";

    // 修飾 方法
    @Override
    public final String behavious() {
        return "Dog can wang wang ";
    }
}

靜態 static

  • 定義:靜態變量 屬於 (類變量)
  • 區別:非靜態成員 屬於 實例
  • 使用方式:靜態成員通常使用 類名直接調用
  • 運行方式:被 static修飾的成員最優先加載到內存
	   public final static PrintStream out = null;

        // static 類名直接調用
        System.out.println("狗會叫");

1.3

接口 Interface

package note4;

/**
 * @author Calvin
 * @titile: USB接口
 * @date 2019/2/20
 * @since 1.0
 */
public interface Usb {
}

2.內部類

定義: 定義在類內部、方法內部局部代碼塊中的類

  • 非靜態 內部類
    • 定義:依賴於 外部類對象 存在
public class OutClass {

    // 外部類的靜態成員
    private static String outClassStatisVariable = "OUT_CLASS_STATIC_VARIABLE";

    // 外部類變量
    private String outClassVariable = "OUT_CLASS_VARIABLE";

    /**
     * 2. 非靜態內部類 -> 依賴於 外部類對象 存在
     */
    public class InnerClass{
        public void println(){
            // 允許訪問 靜態 和 非靜態 的成員變量
            System.out.println(outClassStatisVariable);
            System.out.println(outClassVariable);
        }
    }

}

  • 靜態 內部類
    • 定義: 聲明在 內部的類

    • 注意:

      • 靜態內部類 只能訪問外部類的靜態成員
      • 不能直接訪問 外部類的非靜態成員
public class OutClass {

    // 外部類的靜態成員
    private static String outClassStatisVariable = "OUT_CLASS_STATIC_VARIABLE";

    // 外部類變量
    private String outClassVariable = "OUT_CLASS_VARIABLE";

    /**
     *  1.靜態內部類
     */
    public static class NestedStaticClass{

        // 不能直接訪問外部類的非靜態成員
        // this.outClassVariable

        // 只允許訪問外部類的靜態成員
        public void printlnOutMessage(){
            System.out.println(OutClass.outClassStatisVariable);
        }

    }
}

  • 局部 內部類
    • 定義:

      • 聲明 在方法內部 的類
      • 局部類型,只能在 局部使用
      • 但它的實例,可以轉爲父類型傳遞出去
    • 注意:

      • 不可以使用任何訪問 權限修飾符
      • 不可以 直接訪問局部變量(方法的參數等效於局部變量)
      • 如果 一定需要訪問,則需要使用final對局部變量進行修飾
package note4.inner;

/**
 * @author Calvin
 * @titile: 內部類
 * @date 2019/2/20
 * @since 1.0
 */

public class OutClass {

    // 外部類的靜態成員
    private static String outClassStatisVariable = "OUT_CLASS_STATIC_VARIABLE";

    // 外部類變量
    private String outClassVariable = "OUT_CLASS_VARIABLE";


    public void printlnPartInnerMethod(){

        /**
         * 3.局部內部類 -> 聲明 在方法內部 的類
         *              -> 不可以使用任何訪問 權限修飾符
         *              -> 不可以 直接訪問局部變量
         *              -> 一定需要訪問,則需要使用final對局部變量進行修飾
         */
        class PartInnerClass{

            private String partInnerVariable = "PART_INNER_VARIABLE";

            public void println(){
                System.out.println(partInnerVariable);
            }
        }
    }


}

  • 成員 內部類

    • 定義:內部類的 成員屬性(該屬性是成員內部類)
package note4.inner;

/**
 * @author Calvin
 * @titile: 內部類
 * @date 2019/2/20
 * @since 1.0
 */

public class OutClass {

    // 外部類的靜態成員
    private static String outClassStatisVariable = "OUT_CLASS_STATIC_VARIABLE";

    // 外部類變量
    private String outClassVariable = "OUT_CLASS_VARIABLE";

    public class InnerClass{
        /**
         * 4.成員內部類 -> 內部類的屬性(該屬性是成員內部類)
         */
        public class MemberInnerClass{

            private String memberInnerVariable = "MEMBER_INNER_VARIABLE";

            public void println(){
                System.out.println(memberInnerVariable);
            }
        }
    }

  • 匿名 內部類
    • 定義:
      • 就是沒有名稱的類,其名稱由Java編譯器給出,
      • 沒有名稱也就是其他地方就不能引用,不能實例化,只用一次,當然也就不能有構造器。
    • 格式:
      • new 父類(){子類內容};
    • 作用:
      • 實現外部類/接口 中的方法
      • 匿名類可以訪問外部類的成員變量和方法,匿名類的類體不可以聲明稱static成員變量static方法
      • 匿名類由於是一個new的結果,所以其實可以賦值給一個父類對象。因此可以分爲兩種匿名類,成員匿名類局部匿名類(作爲函數參數)
package note4.inner;

/**
 * @author Calvin
 * @titile: 內部類
 * @date 2019/2/20
 * @since 1.0
 */

public class OutClass {


    /**
     * 匿名內部類(成員匿名類) -> 定義: 沒有名稱也就是其他地方就不能引用,不能實例化,只用一次,            *                               當然也就不能有構造器
     *                      -> 格式: new 父類(){子類內容};
     *                      -> 注意事項:可以訪問外部類的成員變量和方法
     *                                   不可以聲明稱static成員變量和static方法。
     *                                   轉換成lambda 表達式必須是一個接口
     *                      -> 分類: 成員匿名類和局部匿名類(作爲函數參數)
     *
     */

    // 成員匿名類 -> OutClass hiddenInnerClass下的成員變量
   public OutClass hiddenInnerClass  = new OutClass(){

       // 不可以聲明稱static成員變量和static方法。
       // static String variable;

        private String hiddenInnerClassVariable = "HIDDEN_INNER_CLASS_VARIABLE";

        public void println(){
            System.out.println(hiddenInnerClassVariable);
        }

    };

}

GitHub

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章