戻る

クラスのsuper
constructorとメソッド

superキーワードは常にその直接の親クラスのメソッドやコンストラクタを指します。

[サンプル]
copy
class p1{
	constructor()
	{
		console.log("p1 constructor");
	}

}
class c1 extends p1{
	 constructor() {
		super();
		console.log("c1 constructor");
	}

}
const cls1 = new c1();
//p1 constructor
//c1 constructor

class p2{
	#num = 0;
	constructor(num)
	{
		this.#num = num;
	}
	result()
	{
		return this.#num;
	}

}
class c2 extends p2{
	 constructor(num) {
		super(num);
	}

}
const cls2 = new c2(10);
console.log(cls2.result());//10

class p3{
	test1()
	{
		console.log("p3 test1");
	}
}
class c3 extends p3{
	test1()
	{
		console.log("c3 test1");
	}
	test2()
	{
		super.test1();
	}
}
const cls3 = new c3();
cls3.test2();//p3 test1
cls3.test1();//c3 test1

class p4{
	test1()
	{
		console.log("p4 test1")
	}
}
class c4 extends p4{
	test1()
	{
		console.log("c4 test1")
	}
	test2()
	{
		super.test1();
	}
}
class g4 extends c4{
	test1()
	{
		console.log("g4 test1")
	}
	test2()
	{
		console.log("g4 test2")
		super.test1();
	}
}
const cls4 = new g4();
cls4.test2();
//g4 test2
//c4 test1
const cls1 = new c1();
c1のconstructorが実行されます。
super();が実行されます。
親クラスのconstructor()が実行されます。
console.log("p1 constructor");が実行されます。
superの処理が終わったので
console.log("c1 constructor");が実行されます。

const cls2 = new c2(10);
c2のconstructor(num)の引数に10が入ります。
super(num);を実行すると
親クラスのconstructor(num)が実行されます。

this.#num = num;
privateフィールドに引数の10が設定されます。

console.log(cls2.result());//10
result()は親クラスにしかないため親クラスのメソッドが実行されます。

return this.#num;
先ほどprivateフィールドに設定した値を戻り値として返します。

const cls3 = new c3();
cls3.test2();//p3 test1
c3のtest2メソッドが実行されます。

super.test1();
親クラスのtest1()を実行します。
console.log("p3 test1");が実行されます。

cls3.test1();//c3 test1
通常の継承によるオーバーライドとして
c3のtest1が実行されます。

const cls4 = new g4();
cls4.test2();
g4のtest2メソッドのconsole.log("g4 test2")が実行されます。

super.test1();
g4から見て親クラスのc4のtest1メソッドが実行されます。
console.log("c4 test1")を実行します。




戻る


著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームペーよびアプリ利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。