1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package a 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 SubstractionableCalculator 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) { SubstractionableCalculator c1 = new SubstractionableCalculator(); c1.setOprands(10, 20); c1.sum(); c1.avg(); c1.substract(); } } | cs |
오버라이딩이란 부모클래스에 있는 메소드를 자식클래스에서 재정의 함으로서
부모클래스의 메소드를 변경하지 않고, 변경된 메소드를 사용할 수 있는 것.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package a; 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 SubstractionableCalculator 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) { SubstractionableCalculator c1 = new SubstractionableCalculator(); c1.setOprands(10, 20); c1.sum(); c1.avg(); c1.substract(); } } | cs |
리턴값을 갇는 메소드를 만들기위해 avg()를 재정의 했으나 이 예제는 오류가 발생한다.
그 이유는 부모클래스의 avg()메소드는 리턴값이 없는 void형이기 때문에
오류가 발생하게 된다.