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(重載)的差別
* .重寫前提:需要繼承關系
* 重載前提:同一個類裡
* .重寫需要方法聲明完全一緻
* 重載隻跟參數有關