반응형
package org.opentutorials.javatutorials.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);
}
}
class CalculatorChildClass extends Calculator {
public void sum() {
System.out.println("값 은 " + (this.left + this.right));
}
}
public class CalculatorMain {
public static void main(String[] args) {
CalculatorChildClass c1 = new CalculatorChildClass();
c1.setOperands(10, 20);
c1.sum();
}
}
출력값
sum() 이 Calculator 클래스와 CalculatorChildClass 클래스 안에 2개가 선언 되어있다.
상속된 CalculatorChildClass (자식 클래스) 안의 sum 이 호출된다.
이것을 overriding 이라 한다.
package org.opentutorials.javatutorials.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 CalculatorChildClass extends Calculator {
public void sum() {
System.out.println("값 은 " + (this.left + this.right));
}
public int avg() { //에러발생한다
return (this.left + this.right) / 2;
}
}
public class CalculatorMain2 {
public static void main(String[] args) {
CalculatorChildClass c1 = new CalculatorChildClass();
c1.setOperands(10, 20);
c1.sum();
c1.avg();
}
}
에러 발생한다.
부모의 메서드와 자식의 메서드의 return 타입 과 메서드 이름, 매개 변수의 데이터 타입과 순서와 갯수가 맞아야한다.
Super
package org.opentutorials.javatutorials.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 int avg() {
return ((this.left + this.right) / 2);
}
}
class CalculatorChildClass extends Calculator {
public void sum() {
System.out.println("값 은 " + (this.left + this.right));
}
public int avg() {
return super.avg();
}
}
public class CalculatorMain2 {
public static void main(String[] args) {
CalculatorChildClass c1 = new CalculatorChildClass();
c1.setOperands(10, 20);
c1.sum();
System.out.println("실행 결과는 " + c1.avg());
}
}
부모 클래스와 자식 클랙스인 CalculatorChildClass 의 avg() 메서드의 내용이 같으면 중복되니까
자식 클래스의 avg()메서드에 super.avg() 라고 적는다.
부모 클랙스의 avg()를 부른다.
반응형
'Java' 카테고리의 다른 글
[Java] 메서드 접근 제어자 (0) | 2021.03.13 |
---|---|
[Java] overloading 오버로딩 (0) | 2021.03.11 |
[Java] 생성자, super (0) | 2021.03.09 |
[Java] 생성자 (0) | 2021.03.08 |
[Java] this (0) | 2021.03.07 |