본문 바로가기
프로그래밍 언어/JAVA

08. 다형성과 내부클래스

by zieunee 2019. 2. 11.
반응형



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