天天看點

傑神之Java代碼塊和方法的繼承(方法重載和方法重寫)Java代碼塊和方法的繼承(方法重載和方法重寫)

Java代碼塊和方法的繼承(方法重載和方法重寫)

代碼塊

代碼塊分類:

* 1.局部代碼塊(限制變量的作用域)

書寫位置:方法中

* 2.構造代碼塊(在開發中很少使用)

書寫位置:在類中方法外

調用時機:如果你有構造代碼塊,系統會幫你調用

幫你在建立對象之前調用 每次建立對象都會調用

* 3.靜态代碼塊(一定是被static修飾的)

靜态代碼塊依賴類 随着類的加載而加載

注意:加載一次(不管你建立多少對象,系統隻調用一次)

應用場景:加載驅動(U盤裝載驅動程式 JDBC資料庫驅動)

* 4.同步代碼塊(多線程)

public class Demo01 {
    public static void main(String[] args) {
        /*{
            System.out.println("我是局部代碼塊");
            }   */
        Person person = new Person();
        person.setAge();
        person.setName("james");
        person.sayHi();     
        Person person1 = new Person("Tom", );
        person1.sayHi();        
    }
}
    // 人名 年齡 有參無參 構造 sayHi
    class Person{
        private String name;    
        private int age;    
        //構造代碼塊
        {   
            // 每個對象都會調用同一樣的方法 可以使用代碼塊
            System.out.println("哈哈");
        }
        static{
            System.out.println("我是靜态代碼塊");
        }       
        // 有參無參構造方法
        public Person() {
            System.out.println("我是無參的構造方法");
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
            System.out.println("我是有參的構造方法");
        }
        // get/set方法
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
        //  sayHI方法
        public void sayHi() {
            System.out.println(name + " " +age);
        }

        public void sleep() {
            System.out.println("睡覺 就是爽");       
        }
    }
           

繼承

  • 特點:

    1.減少代碼量

    2.讓類與類之間産生關聯(父子)

  • 繼承使用的關鍵字:extends
  • 注意:

    1.繼承時可以把多個類中相同的功能或方法抽取出來,

    重新構造一個類出來 把這些類 建立繼承關系

    2.建立繼承關系的同時 一定要符合邏輯(切記不要為了繼承而繼承)

    3.java隻允許單繼承(多繼承可以使用接口間接實作)

    4.java 中允許多層繼承(爺爺 父親 兒子 孫子 …)

    5.java中最頂層的父類(最基礎) Object類

    6.如果這個類沒有寫繼承哪個父類 預設繼承Object類

    7.如果使用共有方法或者類 可以目前繼承中建立最頂端的類來使用

    8.如果要使用特殊的方法 就建立目前繼承中最末端的類來使用

    9.構造方法不能被繼承,為了保障繼承的完整性,在你建立子類對象的

    時候 ,如果不調用父類的構造方法,系統會幫你調用父類無參構造方法

super 關鍵字

super代表是父類的對象

super 調用方法

* 調用對象 super點對象

* 調方法 super點方法()

public class Demo05 {
    public static void main(String[] args) {
        TestB testB = new TestB();
        testB.fun();
    }
}

    class TestA{
        int num1 = ;
        int num2 = ;
        //無參構造方法注釋
        //  public TestA() {
    //  }

        public TestA(int num1, int num2) {
            super();
            this.num1 = num1;
            this.num2 = num2;
        }
        public void sayHi() {
            System.out.println("jaja");
        }
    }
    //繼承TestA類
    class TestB extends TestA{
        int num1 = ;  

        // 子類的構造方法中 如果你什麼都不寫 會預設調父類無參構造
            //如果父類 沒有無參的構造方法 就證明 父類當中一定有有參方法
            //無論有參 還是無參 子類的構造方法中必須調用一個
            //如果沒有調用無參的, 必須要手動調用一個有參構造方法
        public TestB(int num1, int num2) {
            super(num1, num2);
        }
        public void fun() {
            //使用this 時 會現在本類中尋找該屬性 沒找到 就去父類中找
            System.out.println(this.num1 + " " + this.num2);
            System.out.println(super.num1);
        //  this.sayHi();
        //  super 調用方法  super.方法();  super();調用父類構造方法  this(); 調用本類構造方法
        //  super.sayHi();
        }
    }
           

方法重寫和方法重載的差別

  • 方法重寫

    注意:方法聲明完全一緻的時候,叫方法的重寫

    方法的重寫建立在類與類之間有繼承關系

    • 方法重載

      實作相同的功能,但是函數的内部實作不同。函數的重載是函數名字相同,并且隻跟參數有關(參數的類型 參數的順序 參數的個數有關),跟參數的傳回值和參數名無關。

* Override(重寫)和Overload(重載)的差別
 * .重寫前提:需要繼承關系
 *   重載前提:同一個類裡
 * .重寫需要方法聲明完全一緻
 *   重載隻跟參數有關