全球十大跨境電商平臺seo com
java中子類在使用有參構(gòu)造創(chuàng)建對象的時候不必要必須調(diào)用父類有參構(gòu)造
而js則必須用super()調(diào)用父類的有參構(gòu)造,即使用不到也必須傳遞
Java 中的處理方式
-
可選擇性參數(shù):
- 在 Java 中,當子類使用父類的有參構(gòu)造方法創(chuàng)建對象時,可以只傳遞需要的參數(shù)。如果父類的構(gòu)造方法有多個參數(shù),子類可以選擇不傳遞某些參數(shù),只傳遞那些需要的參數(shù)。
-
構(gòu)造函數(shù)重載:
- Java 支持構(gòu)造函數(shù)重載,因此可以為父類定義多個構(gòu)造函數(shù),子類可以調(diào)用合適的構(gòu)造函數(shù)。
class Animal {private String name;private int age;// 有參構(gòu)造public Animal(String name, int age) {this.name = name;this.age = age;}public Animal(String name) {this.name = name;this.age = 0; // 默認年齡}public void sayHello() {System.out.println("動物在叫~");}
}class Dog extends Animal {public Dog(String name) {super(name); // 只需傳遞 name,age 使用默認值}public void sayHello() {System.out.println("汪汪汪汪!");}
}// 使用示例
Dog dog = new Dog("旺財");
JavaScript/TypeScript 中的處理方式
- 必須傳遞的參數(shù):
- 在 JavaScript(TypeScript)中,如果子類的構(gòu)造函數(shù)調(diào)用父類的有參構(gòu)造函數(shù),必須傳遞所有的參數(shù),盡管子類可能不需要使用某些參數(shù)。這是因為 JavaScript 不支持構(gòu)造函數(shù)重載,所有必要的參數(shù)都需要傳遞以確保父類的正確初始化。
示例(JavaScript/TypeScript)
class Animal {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log('動物在叫~');}
}class Dog extends Animal {constructor(name: string, age: number) {super(name, age); // 必須傳遞所有參數(shù)}sayHello() {console.log('汪汪汪汪!');}
}// 使用示例
const dog = new Dog('旺財', 3); // 必須傳遞 age
- Java: 子類在構(gòu)造對象時可以選擇性地傳遞父類構(gòu)造函數(shù)的參數(shù),且可以通過重載實現(xiàn)多個構(gòu)造函數(shù)。
- JavaScript/TypeScript: 子類在構(gòu)造對象時必須將父類構(gòu)造函數(shù)的所有參數(shù)都傳遞,即使子類不需要使用某些參數(shù)。
構(gòu)造函數(shù)重載:
- Java: 支持構(gòu)造函數(shù)重載,可以在同一類中定義多個構(gòu)造函數(shù),參數(shù)可以有不同的數(shù)量和類型。
- TypeScript: 不支持構(gòu)造函數(shù)重載,定義多個構(gòu)造函數(shù)會導致錯誤??梢酝ㄟ^可選參數(shù)或默認參數(shù)來模擬重載。
參數(shù)傳遞:
- Java: 子類在調(diào)用父類的構(gòu)造函數(shù)時,可以選擇性地傳遞參數(shù)。例如,可以只傳遞部分參數(shù),使用默認值或其他構(gòu)造函數(shù)。
- TypeScript: 子類必須傳遞父類構(gòu)造函數(shù)中定義的所有參數(shù),無法選擇性傳遞。
訪問控制:
- Java: 有嚴格的訪問控制(public、protected、private),可以控制構(gòu)造函數(shù)的可見性。
- TypeScript: 也支持訪問修飾符,允許設(shè)置構(gòu)造函數(shù)的訪問級別,但在實踐中使用較少。
構(gòu)造函數(shù)的調(diào)用:
- Java: 使用
super()
調(diào)用父類構(gòu)造函數(shù)是可選的,只要父類有無參構(gòu)造函數(shù)。- TypeScript: 如果子類定義了構(gòu)造函數(shù),必須在子類構(gòu)造函數(shù)的第一行調(diào)用
super()
,并傳遞必要的參數(shù)。初始化方式:
- Java: 可以在構(gòu)造函數(shù)中進行復雜的初始化邏輯。
- TypeScript: 也可以在構(gòu)造函數(shù)中進行初始化,但由于 JavaScript 的動態(tài)特性,類型檢查和初始化邏輯可能會有所不同。
類型系統(tǒng):
- Java: 是靜態(tài)類型語言,類型在編譯時檢查。
- TypeScript: 是一個超集,提供靜態(tài)類型,但最終會編譯成動態(tài)類型的 JavaScript,因此類型檢查是在開發(fā)時進行的。