본문 바로가기
Language/Java

[Java] java 입문 09 - innerClass / 추상클래스 / 인터페이스

by 별토끼. 2017. 5. 18.
반응형



[Java] java 입문 09 - 상속 / innerClass / 추상클래스 / 인터페이스


  • 상속 복습
- SmartPhone 객체를 생성할 경우 상속에 의해 Heap영역에 Object, Phone HandPhone객체까지 생성이 된다.

- 생성한 객체를 변수에 넣을 때 변수 dataType에 따라서 사용할 수 있는 필드와 메소드가 달라진다.

  • 상속시 객체 생성 순서
- A를 상속받은 B를 main에서 출력하면 console에 A가 먼저 출력된다.

- 즉, A클래스 객체를 먼저 생성한 후에 B클래스 객체를 생성한다.

* A class

* B class

* main

* 콘솔 출력시


  • super
- 부모 클래스가 인자를 갖고있을 때 상속을 받게 되면 부모클래스에 인자를 전달해줘야 한다.

- 인자를 전달할 때는 super를 이용하여 전달한다.

- 생성자를 이용하여 부모클래스에 필요한 인자를 생성한 후 super를 이용한다.

- 전달하지 않을 경우 오류를 발생시킨다.


*Computer 클래스

*Cpu 클래스

*NoteBook 클래스

  - NoteBook의 생성자에 부모클래스의 인자를 받아 전달한다

  - Computer의 method를 오버라이딩하여 재정의해준다.

* overriding 하기 


* 출력 결과

  • InnerClass

- inner Class : 클래스 내부의 클래스

- innerClass를 이용하는 이유 : 바깥을 감싸고 있는 필드나 메소드를 얼마든지 참조할 수 있다.

- local inner Class : 메소드 안의 클래스


* Bakery클래스

  - 생성자, 멤버필드, innerClass, local innerClass를 생성한다.

  - getBread( )메소드는 Bread를 리턴타입으로 갖는 메소드이다.

* main

  - Bakery객체를 생성한다.

  - getBread() 메소드로 Bread객체를 생성한다.

  - Bread객체 속 메소드를 이용한다.


  • 추상클래스
 *  - class 예약어 앞에 abstract 를 명시해서 클래스를 정의한다.
 *  - 형태만 정의되고 실제 구현은 되지 않은 메소드가 존재할수 있다.
 *  - 형태만 정의된 메소드를 만들때는 abstract 예약어를 붙어서 메소드를 정의한다.
 *  - 생성자는 존재하지만 단독으로 객체 생성은 불가하다
 *  - 추상클래스 Type 의 id 가 필요하다면 추상클래스를 상속받은 자식클래스를 
      정의해서 객체 생성한다.
 *  - 추상클래스를 상속받은 자식클래스는 부모의 추상메소드를 모두 
      오버라이드(재정의) 해야한다


*Weapon클래스

 - attack( ) 추상 메소드에 abstract를 넣는다.

 - 형태만 정의되어 있을 뿐 실제 구현은 되어있지 않다.

 - 추상 메소드를 갖고있는 클래스에도 abstract를 입력한다.


* MyWeapon 클래스

 - Weapon을 상속받고 있는 클래스이다.

 - 자식클래스인 MyWeapon클래스는 부모클래스의 추상메소드 사용을 위해 overriding해야 한다.


*YourWeapon 클래스

 - Weapon을 상속받고 있는 클래스이다.

 - 자식클래스인 YourWeapon클래스는 부모클래스의 추상메소드 사용을 위해 overriding해야 한다.

* main 메소드의 잘못된 추상클래스 사용

 - 추상클래스의 단독 사용은 불가능하다.

 - attack( ) 메소드가 정의되어있지 않기 때문이다.

 - 자식 클래스가 overriding으로 재정의해줘야 한다.


* 새로 생성한 클래스를 이용한 main

 - MyWeapon, YourWeapon 객체를 생성하여 메소드를 호출한다.


* 익명의 함수를 이용한 main

 - 익명의 local innerClass를 이용한다.

 - 익명의 local innerClass 이용하는 방법

: new Weapon( ) {  익명의 클래스 자리  }

- 번거롭게 새로 클래스 생성없이 익명Class이용하여 추상클래스를 오버라이딩하여 이용한다. 이 때, 이 익명의 클래스는 Weapon 클래스를 상속 받게 된다.


  • 인터페이스(Interface)
 * - 생성자가 없다 (객체 생성 불가)
 * - 추상 메소드만 정의할 수 있다.
 * - 필드는 static final 멤버필드만 가질 수 있다.
 * - 데이터 type 역할을 할 수 있다.
 * - 클래스는 extends를 이용하여 상속받고 Interface는 implements를 통해 구현한다.
 * - implements + 클래스 를 하면 인터페이스에 있는 모든 추상메소드를 implements한다.

* Interface 클래스

* MyRemocon 클래스

 - implement받는 Remocon클래스의 abstract 메소드를 overriding한다.


* YourRemocon 클래스  

 - 같은 방식으로 implement받는 Remocon클래스의 abstract메소드를 overriding한다.


* 새로 생성한 class의 객체를 이용한 main

 - Remocon 리턴타입을 이용해도 MyRemocon클래스에서 추상 메소드를 overriding해주었기 때문에 생성이 가능하다.

 - .을 이용하여 method를 이용할 수 있다.


* 익명의 class를 이용한 main

 - Remocon 클래스만으로는 interface이기 때문에 객체 생성이 되지 않는다.

 - 따라서 뒤에 익명의 클래스를 생성한다. 이 때, 이 익명의 클래스는 Remocon 클래스를 implement 받게 된다.

- 익명의 클래스 안에 overriding을 한 후 메소드를 호출한다.

반응형

댓글