튜터링 6일 차!!
메서드 오버 라이딩 , 추상 메서드 , 인터페이스
▷ 추상 메서드
▷ 추상 클래스
▷ 인터페이스
▷ 인터페이스 상속
▷ 과제
- 메서드 오버 라이딩
우선 오버 라이딩이란 상속관계에서만!! 나타난다.
자세한 내용은 https://hj39-develop.tistory.com/15?category=909926를 참조하면 된다.
오버 라이딩과 오버 로딩의 차이점이 작성되어있다.
오버 라이딩과 업 캐스팅의 우선순위를 정하자면 (오버 라이딩 > 업 캐스팅)으로 나타난다.
업 캐스팅된 레퍼런스라도 메서드가 오버 라이딩되어있는 경우 오버 라이딩된 결과값이 출력된다.
- 추상 메서드
선언이 되어있지만 구현이 되어있지 않는 메서드를 말한다.
abstract를 붙여서 선언한다.
public abstract String getName();
public abstract void setName(String s);
- 추상 클래스
추상 클래스가 되는 조건은 2가지가 있다.
- 추상 메서드가 1개 이상인 클래스(클래스에 abstract를 붙어야 한다)
- 추상 메서드가 클래스 내부에 존재하지 않지만 abstract로 선언된 클래스
abstract class Calculator {
public abstract int add(int a, int b);
public abstract int subtract(int a, int b);
public abstract double average(int[] a);
}
- 인터페이스
자바에서 배우는 새로운 개념이 등장했다.
인터페이스는 클래스가 구현해야 할 메서드들이 선언되는 추상 형이다.
interface로 선언되며 내부에는 필드 선언이 불가능하다.
interface PhoneInterface { // 인터페이스 선언
final int TIMEOUT = 10000; // 상수 필드 선언
void sendCall(); // 추상 메소드
void receiveCall(); // 추상 메소드
default void printLogo() { // default 메소드
System.out.println("** Phone **");
}
- 인터페이스 상속
특이하게도 interface -> class를 상속할 경우에는 implements를 사용하여 상속한다.
그 외의 경우 interface->interface , class -> interface 인 경우에는 extends를 사용한다.
interface PhoneInterface { // 인터페이스 선언
final int TIMEOUT = 10000; // 상수 필드 선언
void sendCall(); // 추상 메소드
void receiveCall(); // 추상 메소드
default void printLogo() { // default 메소드
System.out.println("** Phone **");
}
}
class SamsungPhone implements PhoneInterface { // 인터페이스 구현
// PhoneInterface의 모든 메소드 구현
@Override
public void sendCall() {
System.out.println("띠리리리링");
}
@Override
public void receiveCall() {
System.out.println("전화가 왔습니다.");
}
- 인터페이스 와 추상클래스 비교
- 과제
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
class Shape {
Shape next; // 다음연결된 객체를 나타낸다
public void draw() {
}
}
class S_Line extends Shape {
public void draw() {
System.out.println("Line"); // 상속의 경우 buffer이용????
}
}
class S_Rect extends Shape {
public void draw() {
System.out.println("Rect");
}
}
class S_Circle extends Shape {
public void draw() {
System.out.println("Circle");
}
}
public class UsingOverride {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 객체 생성
Shape start = new Shape();
Shape last = new Shape();
Shape obj = new Shape();
// 입력숫자 저장 배열
int[] input_Num = new int[5];
// System.out.println("1.Line 2.Circle 3. Rect");
bw.write("1.Line 2.Circle 3.Rect\n");
bw.flush();
// 입력순서
for (int i = 0; i < 5; i++) { // 메뉴중 하나 선택
// int N = sc.nextInt(); // 순서입력
int N = Integer.parseInt(br.readLine());
if (N > 0 && N <= 3)
input_Num[i] = N;
else { // 1~3 을 입력하지 않은경우 입력할 때 까지 반복
while (true) {
bw.write("잘못 입력하셨습니다.\n");
bw.flush(); // 버퍼를 비운다 (안할경우 출력이 안됨)
// System.out.println("잘못입력셨습니다.");
// N = sc.nextInt();
N = Integer.parseInt(br.readLine());
if (N >= 1 && N <= 3) { // 1~3 입력시 탈출
input_Num[i] = N;
break;
}
}
}
}
// 첫번째 입력숫자 링크 연결
switch (input_Num[0]) {
case 1:
start = new S_Line(); // Line 객체 연결
last = start;
break;
case 2:
start = new S_Circle(); // Circle 객체 연결
last = start;
break;
case 3:
start = new S_Rect(); // Rect 객체 연결
last = start;
break;
}
// 두,세번째 입력숫자 링크 연결
for (int i = 1; i < 5; i++) {
switch (input_Num[i]) {
case 1:
obj = new S_Line();
last.next = obj; // Line 객체 연결
last = obj;
break;
case 2:
obj = new S_Circle();
last.next = obj; // Circle 객체 연결
last = obj;
break;
case 3:
obj = new S_Rect();
last.next = obj; // Rect 객체 연결
last = obj;
break;
}
}
// 모든 도형 출력
Shape p = start;
while (p != null) {
p.draw();
p = p.next;
}
br.close();
bw.close();
sc.close();
}
}
이번 과제는 문제를 이해하는 것이 관건이였다.
이번 과제는 2학년 1학기에 배운 자료구조를 떠올리며 코드를 구성했다.
상당히 복합적인 문제였는데 업캐스팅과 오버라이딩의 개념과 자료구조의 연결리스트를 응용한 문제였다.
'JAVA' 카테고리의 다른 글
[JAVA] 튜터링 8일차!!(2021-07-30) (0) | 2021.08.03 |
---|---|
[JAVA] 공부 7일차! (2021-07-28) (0) | 2021.07.29 |
[JAVA] 공부 5일차! (2021-07-23) (0) | 2021.07.24 |
[JAVA] 공부 4일차! (2021-07-21) (0) | 2021.07.22 |
[JAVA] 공부 3일! (2021-07-16) (0) | 2021.07.17 |