1. 程式人生 > >java面向物件繼承

java面向物件繼承

  • 程式碼塊概述:在Java中,使用{}括起來的程式碼被稱為程式碼塊。
    程式碼塊分類:根據其位置和宣告的不同,可以分為區域性程式碼塊,構造程式碼塊,靜態程式碼塊,同步程式碼塊。
    常見程式碼塊的應用
    a:區域性程式碼塊 :在方法中出現;限定變數生命週期,及早釋放,提高記憶體利用率
    b:構造程式碼塊 :在類中方法外出現;多個構造方法方法中相同的程式碼存放到一起,每次呼叫構造都執行,並且在構造方法前執行
    c:靜態程式碼塊 :在類中方法外出現,加了static修飾;在類中方法外出現,並加上static修飾;用於給類進行初始化,在載入的時候就執行,並且只執行一次。
class Student {
			static {
				System.out.println("Student 靜態程式碼塊");
			}
			
			{
				System.out.println("Student 構造程式碼塊");
			}
			
			public Student() {
				System.out.println("Student 構造方法");
			}
		}

		class StudentDemo {
			static {
				System.out.println("StudentDemo的靜態程式碼塊");
			}
			
			public static void main(String[] args) {
				System.out.println("我是main方法");
				
				Student s1 = new Student();
				Student s2 = new Student();
			}
		}
  • 繼承:多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可
  • 通過extends關鍵字可以實現類與類的繼承;class 子類名 extends 父類名 {} ;單獨的這個類稱為父類,基類或者超類;這多個類可以稱為子類或者派生類。
  • 繼承的好處:提高了程式碼的複用性、提高了程式碼的維護性、讓類與類之間產生了關係,是多型的前提
  • 繼承的弊端:類的耦合性增強了。
  • 繼承特點:java只支援單繼承,不支援多繼承,但可以多層繼承
  • -繼承的注意事項:子類只能繼承父類所有非私有的成員(成員方法和成員變數)
    子類不能繼承父類的構造方法,但是可以通過super(待會兒講)關鍵字去訪問父類構造方法。
    不要為了部分功能而去繼承
  • this和super的使用
    a:呼叫成員變數
    this.成員變數 呼叫本類的成員變數
    super.成員變數 呼叫父類的成員變數
    b:呼叫構造方法
    this(…) 呼叫本類的構造方法
    super(…) 呼叫父類的構造方法
    c:呼叫成員方法
    this.成員方法 呼叫本類的成員方法
    super.成員方法 呼叫父類的成員方法
  • 繼承中的構造方法:子類中所有的構造方法預設都會訪問父類中空引數的構造方法
    原因:因為子類會繼承父類中的資料,可能還會使用父類的資料。所以,子類初始化之前,一定要先完成父類資料的初始化。
  • 父類沒有無參構造方法,子類怎麼辦?
    a: 在父類中新增一個無參的構造方法
    b:子類通過super去顯示呼叫父類其他的帶參的構造方法
    c:子類通過this去呼叫本類的其他構造方法
    本類其他構造也必須首先訪問了父類構造
    • 注意事項:super(…)或者this(….)必須出現在第一條語句上
class Fu{
			public int num = 10;
			public Fu(){
				System.out.println("fu");
			}
		}
		class Zi extends Fu{
			public int num = 20;
			public Zi(){
				System.out.println("zi");
			}
			public void show(){
				int num = 30;
				System.out.println(num);
				System.out.println(this.num);
				System.out.println(super.num);
			}
		}
		class Test {
			public static void main(String[] args) {
				Zi z = new Zi();
				z.show();
			}
		}

輸出的是
fu
zi
30
20
10

  • 方法重寫:子類中出現了和父類中一模一樣的方法宣告(方法名,引數列表,返回值型別),也被稱為方法覆蓋,方法複寫。
  • 方法重寫注意:父類中私有方法不能被重寫、子類重寫父類方法時,訪問許可權不能更低,對好一致、父類靜態方法,子類也必須通過靜態方法進行重寫。
  • final修飾特點:修飾類:被修飾類不能被繼承
    修飾方法: 被修飾的方法不能被重寫
    修飾變數: 被修飾的變數不能被重新賦值,因為這個量其實是一個常量