[JAVA]overriding
クリエイティブ継承
子メソッドから親メソッドで定義されたメソッドをロードし、新しい定義の機能を追加する場合は、どうすればいいですか?
class Calculator{
int left,right;
public void setOperands(int left, int right) {
this.left=left;
this.right=right;
}
public void sum() {
System.out.println(this.left+this.right);
}
public void avg() {
System.out.println((this.left+this.right)/2);
}
}
class SubstractionableCalculator extends Calculator{
//상위클래스에 있는 메소드sum을 불러와서 새로운 기능을 추가하게 된다면
//상위클래스에 있는 메소드가 아닌 하위클래스 메소드sum을 실행시키게된다.
public void sum() {
System.out.println("실행 결과는" + (this.left+this.right)+"입니다.");
}
public void substract() {
System.out.println((this.left)-(this.right));
}
}
public class CalculatorDemo{
public static void main(String[] args) {
//SubstractionableCalculator의 생성자 c1호출
SubstractionableCalculator c1=new SubstractionableCalculator();
c1.setOperands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}
}
実行結果:実行結果は30です.
15
-10
次のように、子クラスが親クラスにロードされ、再定義されているメソッドの合計を示します.
メソッドとは、親ではなく子で実行されます.
親を継承するメソッドとメソッドオーバーライドと呼ばれるメソッドを再定義して使用します.
上書き条件
次の例は正しくありません.
メソッドを上書きするには、同じ戻りフォーマットが必要です.
戻りフォーマットを同じにすることで、次の方法で上書きできます.
ただし、return値を表示すると、重複していることがわかります.ジェネレータと同様にsuperを使用すると問題を解決できます.
class Calculator1{
int left,right;
public void setOperands(int left, int right) {
this.left=left;
this.right=right;
}
public void sum() {
System.out.println(this.left+this.right);
}
public int avg() {
return ((this.left+this.right)/2);
}
}
class SubstractionableCalculator1 extends Calculator1{
public void sum() {
System.out.println("실행 결과는" + (this.left+this.right)+"입니다.");
}
//super를 사용함으로써 return값의 중복제거
public int avg() {
return super.avg();
}
public void substract() {
System.out.println((this.left)-(this.right));
}
}
public class CalculatorDemo2{
public static void main(String[] args) {
//SubstractionableCalculator의 생성자 c1호출
SubstractionableCalculator1 c1=new SubstractionableCalculator1();
c1.setOperands(10, 20);
c1.sum();
System.out.println("실행 결과는" +c1.avg());
c1.substract();
}
}
Reference
この問題について([JAVA]overriding), 我々は、より多くの情報をここで見つけました https://velog.io/@kjhabc2002/JAVAoverridingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol