본문 바로가기

Programming/자바

생활코딩 자바 - overriding ??

: 부모클래스의 메소드를 상속받으면서 그 메소드를 그대로 쓰지 않고 재정의하여 기능 변경하는 것

=덮어쓰기

 

  •  

class Calculator {
int left, right;

public void setOprands(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 SubCalculator extends Calculator {
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) {
SubCalculator c1 = new SubCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}

 

//

실행결과는30입니다.
15
-10

 

 

오버라이딩의 조건, 제약사항
  • 오류

class Calculator {
int left, right;

public void setOprands(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 SubCalculator extends Calculator {
public void sum() {
System.out.println("실행결과는"+(this.left+this.right)+"입니다.");
}

public int avg() {    => 부모-자식클래스의 메소드형식 불일치 => 에러 발생 (둘의 리턴 데이터타입, 이름, 매개변수(숫자,순서, 데이터타입) 일치해야 함)  ===> 이러한 메소드의 형식 = 서명(signature)
return (this.left + this.right)/2;
}

public void substract() {
System.out.println(this.left - this.right);
}
}

public class CalculatorDemo {

public static void main(String[] args) {
SubCalculator c1 = new SubCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}

 

 

  • 중복 제거

class Calculator {
int left, right;

public void setOprands(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);    return super.avg();​
}
}

class SubCalculator extends Calculator {
public void sum() {
System.out.println("실행결과는"+(this.left+this.right)+"입니다.");
}

public int avg() {
return (this.left + this.right)/2;
}

public void substract() {
System.out.println(this.left - this.right);
}
}

public class CalculatorDemo {

public static void main(String[] args) {
SubCalculator c1 = new SubCalculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.substract();
}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Programming > 자바' 카테고리의 다른 글

생활코딩 자바 - 클래스패스 ??  (0) 2022.04.06
생활코딩 자바 - overloading  (0) 2022.04.02
생활코딩 자바 - 상속과 생성자 ??  (0) 2022.04.02
생활코딩 자바 - 상속  (0) 2022.04.02
생활코딩 자바 - 생성자  (0) 2022.04.02