자식 개별로 함수쓸꺼같은데 부모에 공통된것만 미리 선언해서 할때 사용
package abstractpractice;
import java.util.Scanner;
public class abstractpractice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String t = sc.nextLine();
Select P;
Tr Q;
P = new Select(s,t);
Q = P.check();
System.out.println(Q.cmp());
}
}
abstract class Tr {
public String s;
public String t;
public Tr() {}
public Tr(String s, String t) {
this.s = s;
this.t = t;
}
public abstract int cmp();
}
class Strcmp extends Tr {
public Strcmp(String s, String t) {
super(s, t);
}
public int cmp() {
return this.s.compareTo(this.t);
}
}
class Numcmp extends Tr {
double a, b; int result;
public Numcmp(String s, String t) {
super(s, t);
}
public int cmp() {
a = Double.parseDouble(this.s);
b = Double.parseDouble(this.t);
if (a > b) result = 1;
else if (a < b) result = -1;
else result = 0;
return result;
}
}
class Select {
String s;
String t;
public Select(String s, String t) {
this.s = s;
this.t = t;
}
public Tr check () {
char neg_sign = '-';
char s_first_val = this.s.charAt(0);
char t_first_val = this.t.charAt(0);
int i = 0;
int j = 0;
if (s_first_val == neg_sign) {
i = 1;
}
if (t_first_val == neg_sign) {
j = 1;
}
for (int k = i; k < this.s.length(); k++) {
char val = this.s.charAt(i);
char point = '.';
if ((val == point) | (Character.isDigit(val))) {
continue;
}
else {
return new Strcmp(this.s, this.t);
}
}
for (int x = j; x < this.t.length(); x++) {
char val = this.t.charAt(x);
char point = '.';
if ((val == point) | (Character.isDigit(val))) {
continue;
}
else {
return new Strcmp(this.s, this.t);
}
}
return new Numcmp(this.s, this.t);
}
}
보면 Tr class에 abstract cmp 함수 만들어놈 (근데 아무것도 안들어가있음)
그걸 자식노드에서 함수 정의함
Select는 개별 클래스임 --> 자식아님 --> 근데 check return value가 Tr의 자식임
P = new Select(s,t);
Tr Q = P.check();
이게 왜 업캐스팅이냐면 P는 select(개별 클래스)임 근데 check함수 return value가 Tr의 자식노드임
그러니깐 Tr Q로 업캐스팅 해준거임
다운 캐스팅은 무엇이냐 --> 다운 캐스팅은 부모에서 자식으로 접근하는거임
Tr P = new Select(s,t); > 부모 <= 자식 - 업캐스팅
Tr Q = ((Select)P).check(); 부모 <= ((자식)부모).자식함수()
내부 클래스는 무조건 static