Java程式碼塊與Java繼承

wangsongll發表於2017-12-07

一.區域性程式碼塊

1)位置:方法中

2)作用:限定區域性變數的宣告週期。因為區域性程式碼塊可以產生不同的作用域

public class Demo01 {

public static void main(String[] args) {
{
 int num=10;
 System.out.println(num);
}
}

二.構造程式碼塊

1)位置:在類中,方法外

2)定義:直接在類中編寫程式碼塊,稱為構造塊

3)程式碼

 class Demo{ 
} 
{
System.out.println("構造程式碼塊") ; 
}

注意:構造塊優先於構造方法執行,且執行多次

三.靜態程式碼塊

1)定義:直接用static關鍵字來宣告的

2)位置:在類中,方法外

3)特點:只載入一次,隨著類的載入而載入

4)應用場景:用來載入驅動

5)程式碼:

class Demo{ 
static{ 
System.out.println("靜態程式碼塊") ; 
}

四.三個程式碼塊的執行

class Student {
        static {
            System.out.println("Student 靜態程式碼塊”);3 
        }

        {
            System.out.println("Student 構造程式碼塊”);4 6
        }

        public Student() {
            System.out.println("Student 構造方法”);5 7
        }
    }

    class Demo2_Student {
        static {
            System.out.println("Demo2_Student靜態程式碼塊”);1
        }

        public static void main(String[] args) {
            System.out.println("我是main方法”);2

            Student s1 = new Student();
            Student s2 = new Student();
        }
    }

執行順序:

父類靜態程式碼塊→子類靜態程式碼塊→父類構造程式碼塊→父類構造方法→子類構造程式碼塊→子類構造方法

1:Demo2_Student靜態程式碼塊

2:我是main方法

3.Student 靜態程式碼塊

4.Student 構造程式碼塊

5.Student 構造方法

6.Student 構造程式碼塊

7.Student 構造方法

五.繼承(用 extends關鍵字繼承)

1)定義:

把多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼這個多個類無需再定義這些屬性和行為,只要繼承那個類就行了。

2)特點: 1.Java只支援單繼承,不支援多繼承。 (就是說,一個類繼承了一個父類,不允許在繼承別的父類)

2.Java支援多層繼承。

class DemoA {//爺爺類
    String name; //名字
    public void sayHi() {
    System.out.println(name);
    }
}
class DemoB extends DemoA{//父類

}
class DemoC extends DemoB{//子類

}

3)優點

1.提高程式碼的複用性

2.讓類與類之間產生聯絡

3)形式:

class 子類的類名 extends 父類的類名{

}

4)程式碼

public class Demo02 {

    public static void main(String[] args) {
        Cat cat = new Cat();
         cat.color="黑貓";
         cat.leg=4;
         cat.sayHi();


    }

}
  //寫一個動物類
class Animal{
    String color;    //顏色
    int leg ;       //腿數
    String name; 

    public void sayHi() {
    System.out.println(color+"---"+leg);
    }
}
    class Cat extends Animal{

    }

    class Dog extends Animal{

    }

六.繼承中this和super

1)應用場景

1.當子類和父類出現同名的成員變數和成員方法時,用super

2.當子類要呼叫父類建構函式時,可以用super

2)區別

1.成員變數(成員變數同名)

this.num; 這個是本類的成員變數

super.num 這個是父類的成員變數

2.構造方法(注意 繼承不能繼承父類的建構函式)

public Student(String name,int age) {//本類的構造方法
     //呼叫 父類的 有參構造方法
     super(name,age);
     }

3.成員方法(成員方法名相同)

class Father{
      public void siri() {
          System.out.println("我能說英文");
      }
  }

  class Son extence Father{
        public void sc(){//本類的成員方法
            super.siri();//父類的成員方法
        }

  }

七.方法的重寫

1.定義

子類中出現與父類一模一樣的方法時(方法名相同)

2)應用場景

當子類需要父類的功能,而功能主體子類有自己的功能時,可以重寫父類中的方法,這樣,既繼承了父類的功能,又定義了子類特有的內容。

3)程式碼

class Ios7{
      public void siri() {
          System.out.println("我能說英文");
      }
  }
class Ios8 extends Ios7{

    //註解 @Override 標識著這個方法是重寫父類的方法
     @Override
    public void siri() {
        // TODO Auto-generated method stub
         //這裡調不呼叫父類的方法 要根據實際開發來寫

        super.siri();
        System.out.println("功能升級 我會說中文了");

    public void sc() {
        super.siri();

     }   
}

八.final關鍵字(修飾類,成員變數,成員方法)

1.特點

1)修飾類的時候,該類不能被繼承

2)修飾成員變數的時候,該成員變數不能被修改,變成常量

注:用final修飾的變數的命名規則:

名字全部大寫,多單詞用下劃線分開 MAX_VALUE

final修飾成員變數,必須初始化,初始化有兩種

1)直接賦初值

2)構造方法中賦值

final int num;
    public Team() {
        num=10;
    }

3)修飾成員方法的時候,該成員方法不能被重寫

相關文章