一、子類繼承父類的所有屬性和方法
當一個類被另一個類繼承時,子類會繼承父類所有的屬性和方法。這意味着,子類可以訪問和使用父類的所有屬性和方法。
下面是一個基本的例子:
class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { speak() { console.log(this.name + ' barks.'); } } let dog = new Dog('Rex'); dog.speak(); // output: Rex barks.
在這個例子中,Dog類繼承了Animal類的constructor和speak方法,因此它可以使用父類的所有屬性和方法。
二、子類繼承父類的所有屬性和方法JS
在JavaScript中,可以使用Object.create()方法創造一個原型對象。一個子類可以通過Object.create()方法創建一個繼承了父類原型的新對象。
下面是一個例子:
let Animal = { speak() { console.log(this.name + ' makes a noise.'); } }; let Dog = Object.create(Animal); Dog.speak = function() { console.log(this.name + ' barks.'); } let dog = Object.create(Dog); dog.name = 'Rex'; dog.speak(); // output: Rex barks.
在這個例子中,Animal是一個包含speak方法的對象。Dog通過繼承Animal對象使用Object.create()方法創建。然後,它重寫了speak方法以實現自己的獨特行為。最後,一個新的狗對象被創建並被賦予名字“Rex”,並且它可以使用從Dog繼承的speak方法。
三、子類可以繼承父類所有屬性和方法
子類可以繼承所有的父類屬性和方法,包括靜態屬性和方法。
下面是一個例子:
class Animal { static staticMethod() { console.log('This is a static method.'); } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal {} Dog.staticMethod(); // output: This is a static method. let dog = new Dog(); dog.name = 'Rex'; dog.speak(); // output: Rex makes a noise.
在這個例子中,Dog繼承了Animal的靜態方法和實例方法。
四、子類繼承父類的所有成員
子類不僅繼承了父類的所有屬性和方法,還會繼承構造函數中內部初始化的所有成員變量。
下面是一個例子:
class Animal { constructor(name) { this.name = name; this.sound = 'makes a noise.'; } speak() { console.log(this.name + ' ' + this.sound); } } class Dog extends Animal { constructor(name) { super(name); this.sound = 'barks.'; } } let dog = new Dog('Rex'); dog.speak(); // output: Rex barks.
在這個例子中,Dog類繼承了Animal類的構造函數,並且重寫了sound屬性,因此它可以使用從父類繼承的所有屬性和方法,包括構造函數中初始化的成員變量。
五、子類繼承父類所有屬性值
當子類繼承父類時,子類將繼承父類所有屬性和屬性值。
下面是一個例子:
class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { constructor(name) { super(name); this.sound = 'barks.'; } } let dog = new Dog('Rex'); console.log(dog.name); // output: Rex console.log(dog.hasOwnProperty('name')); // output: true console.log(dog.hasOwnProperty('sound')); // output: true
在這個例子中,Dog繼承了Animal類的屬性和屬性值,並且它可以使用從父類繼承的所有屬性和方法。
六、子類在繼承父類的屬性和方法之後
子類在繼承了父類的屬性和方法之後,可以使用super關鍵字來調用父類的方法或構造函數。
下面是一個例子:
class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { constructor(name) { super(name); this.sound = 'barks.'; } speak() { super.speak(); console.log(this.name + ' ' + this.sound); } } let dog = new Dog('Rex'); dog.speak(); // output: Rex makes a noise. Rex barks.
在這個例子中,Dog類繼承了Animal類的speak方法,並且通過使用super.speak()來調用從父類繼承的speak方法。
七、子類繼承父類的私有屬性怎麼訪問
子類不能直接訪問父類的私有屬性,但是可以通過getter和setter方法來獲取或修改父類的私有屬性。
下面是一個例子:
class Animal { constructor(name) { let sound = 'makes a noise.'; this.getName = function() { return name; } this.getSound = function() { return sound; } } speak() { console.log(this.getName() + ' ' + this.getSound()); } } class Dog extends Animal { constructor(name) { super(name); let sound = 'barks.'; this.getSound = function() { return sound; } } } let dog = new Dog('Rex'); dog.speak(); // output: Rex barks.
在這個例子中,Animal類的sound屬性是私有屬性,不被子類直接訪問。但是,通過在構造函數和子類中定義getter方法,還是可以獲取和修改父類的私有屬性。
八、子類能繼承父類的私有屬性嗎
子類不能繼承父類的私有屬性。私有屬性是只在父類中可見的,子類無法通過任何方式訪問它們。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152667.html