Java--繼承

繼承按照我的理解就是擁有別人所擁有的屬性

官方定義:當多個屬性中存在相同屬性和行爲時,將這些內容抽取一個單獨的類中,那麼多個類無需再定義這些屬性,只需繼承這個類即可。
其中,多個類稱爲子類,單獨的類稱爲父類

Java中只能單繼承不能多繼承
在這裏插入圖片描述
但是可以多層繼承
在這裏插入圖片描述

繼承格式

class A extends B{}

繼承中成員變量的特點

寫個代碼來說說

class Fu{
	int age=48;
}
class Zi extends Fu{
	int age=18;
void show()
{	
	System.out.println(age);         //輸出子類18
	System.out.println(super.age);         //輸出父類48
}

}

class DemoJicheng{
	public static void main(String[] args)
	{
		Zi z=new Zi();
		z.show();
	}
}
成員函數特點
package com.b;
class Fu{
	int age=48;
	void talk()
	{
		System.out.println("爸爸會講中文。");
	}
}
class Zi extends Fu{
	int age=18;
void show()
{	
	System.out.println(age);         //輸出子類18
	System.out.println(super.age);         //輸出父類48
}
}
public class Demo5 {
	public static void main(String[] args)
	{
		Zi z=new Zi();
		z.show();
		z.talk();              
		//當子類和父類中的方法名相同時,執行的是子類的方法。
		//原因:當名字相同時,子類的方法會覆蓋父類的方法,這稱爲方法的重寫
	}
}

方法重寫

注意

  • 重寫方法必須和被重寫的方法具有相同的方法名參數列表返回值類型
  • 覆蓋時子類方法權限一定要大於父類方法權限(靜態只能覆蓋靜態)
  • 父類中私有方法不可以被覆蓋
方法重載與方法重寫的區別

1.定義不同

  • 方法重載指方法名相同,返回值或者傳入參數不同
  • 方法重寫,要求方法名,返回值傳入參數都相同

2.作用不同

  • 方法重載作用在同一方法中
  • 方法重寫作用在子父類中
子類實例化過程
package com.b;
class Fu{
	int age=48;
	Fu(){
		talk();
		System.out.println("父類構造函數");
	}	
	void talk()
	{
		System.out.println("爸爸會講中文。");
	}
}
class Zi extends Fu{
	int age=18;
	Zi()
	{
		//this();      //super和this只能存在一個    
		super();      // 不寫的話會隱藏
		System.out.println("子類構造函數");
	}

void talk()
	{
		System.out.println("兒子會講中文。");
	}
}
public class Demo5 {
	public static void main(String[] args)
	{
		new Zi();     //匿名對象,只能調用一次  		
	}
}



/*輸出結果
兒子會講中文
父類構造函數
子類構造函數
*/
//原因,talk()被子類重寫
/*執行順序
1.main函數進棧後,先執行子類的構造函數
2.子類構造函數裏,包含了super();所以會跳到父類構造函數
3.父類構造函數裏也有個super();會跳到object。但是,object啥也沒有執行完彈棧。
4.父類構造函數執行talk();因爲takl被重寫,會輸出子類裏的talk();
5.執行完後,輸出“爸爸會說中文”,到此父類執行完彈棧
6.子類繼續執行輸出“兒子會說中文”,執行完彈棧
7.main執行完,彈棧
*/
最後再來個final關鍵字

final可以修飾類,方法,變量
特點:

  • final修飾的類不可以被繼承
  • final修飾的方法不可以被覆蓋
  • final修飾的變量是一個常量。只能被賦值一次
  • 內部類只能訪問被final修飾的局部變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章