08. 다형성과 내부클래스
다형성
수백번 메서드를 오버라이딩 해야하는 것 대신 -> 다형성을 이용할 수 있다.
p330
calcTax(s);
calcTax(c);
calcTax(d);
... 등등은 employee를 상속받는다는 공통점이 있다.
class Salesman extends Employee {...}
new SalesMan();
을 선언한다면
heap에 Employee먼저 만들어 지고 난 후 Salesman이 만들어진다.
그래서 결국 Salesman s 대신 Employee인 부모타입으로 선언해 줄 수 있다.
이것이 "다형성"
Employee s= new SalesMan();
이러면 백개의 메서드를 오버라이딩 안해도 된다.
Object
기본생성자, super 등 자동으로 생성되는 것들이 있다.
class 뒤에 extends ...가 없으면 extends Object 라는 것이 자동으로 만들어진다.
내부적으로 만들어져
서 사용되는 클래스이다.
Object는 모든 자바클래스의 root클래스이고 모든 것을 상속받아서 다 쓸 수 있다.
ex>
Salesman s = new Salesman();
Salesman s2 = s;
if(s.equals(s2)){
System.out.println("equals");
}else{
System.out.println("not equals");
}
s2도 s를 가리키고 있으니 s와 s2는 같은 값이다.
배열에서의 다형성
다른 데이터 타입을 1개의 배열에 만들고 싶다?
---> 다형성을 이용해라!
new SalesMan[6]
new Employee[6]
new Object[6]
new Manager[6]
---> 뭘로할까? new Object[6]! 모든것을 다 포함하고 있기 때문!
다형성의 활용
instanceof 연산자
참조변수가 참고하는 인스턴스 타입을 검사해야할 때 타입을 체크해주는연산자이다.
if문과 함께 사용한다.
if(e instanceof Salesman){
System.out.println("s");
}else if(e instanceof Consultant){
System.out.println("c");
}else if(e instanceof Director){
System.out.println("d");
}else{
System.out.println("e");
}
자식 클래스에서 변수를 선언하고(Employee e
) 다형성을 통해서 Salesman에 있는 e.annual_sales;
를 부르려고 하면 ? 오류가 난다.
타입을 바꿔줘야 한다.
((데이터 타입)참조변수).변수
//Salesman s = (Salesman) e;
((데이터타입)참조변수).메서드();
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
10. 컬렉션 API활용하기 (0) | 2019.02.12 |
---|---|
09. 기본 API활용하기 (0) | 2019.02.11 |
07. 상속과 인터페이스 (0) | 2019.02.08 |
06. 객체지향 구현 (0) | 2019.02.08 |
05.객체지향 (0) | 2019.02.07 |