1. has ~ a 관계

(~가 ~를 가지고 있다.) -> 포함 오브젝트

한 오브젝트가 다른 오브젝트에 속한다. 단순하게 말해서 객체의 멤버필드라고 불리는 객체를 말한다.

2. is~a 관계

(~ 는 ~ 이다.) 상속 ( is like a 관게는 사용금지 )

상속 해주는 클래스 -> super class

  • subclass 의 공통된 부분을 작성

상속 받는 클래스 - sub class

  • 순수하게 자기기능만 생각해서 확장

클래스간의 상속은 단일상속만 가능하다. (복잡성을 낮추기 위해)

  • subclass명 뒤에 extends 사용
class Test extends Object{
	int a;
    public Test(){
		//super(); => 항상 부모의 생성자를 호출, 항상 subclass의 첫번째 라인에 존재한다. }
    public void setA(int a) { this.a = a;}
    public int getA() { return a;}
    
    public static void main(Sstring args[]{
    
 		Test test = new Test();
    }
}

오버라이딩

  • 상속관계인 superclass의 메소드를 재정의하는 것
  • 부모가 제공하는 기능이 나에게 맞지않아서 재정의
    - 완전재가공
    - 확장 ( 내기능 추가 )
    @override
    메소드 입력전 위처럼 입력해줘서 오버라이딩한 메소드라는 것을 표기한다.
    하는 이유: 동적 바인딩을 하기 위해서

동적 바인딩

바인딩 => 메소드의 호출과 메소드 본문과의 연결
1. 정적(static) 바인딩

  • 원시 프로그램의 컴파일링 또는 링크 시에 값이 확정됨
  1. 동적(dynamic) 바인딩
  • 프로그램의 실행되는 과정에서 바인딩되는 것, 실행 이후에 값이 결정됨

오버로딩과 오버라이딩의 차이

  1. 오버로딩 (같은 클래스 내)
  • 여러 개의 같은 이름의 메소드를 정의
  • 메소드의 이름이 같기 때문에 프로그램의 가독성 증가
  1. 오버라이딩 (상속 받은 클래스 내)
  • 부모로부터 받은 메소드의 내부를 입맛에 맞게 변경 다형성의 특징을 사용함.

추상클래스 abstrcat class

눈 , 코 , 입
이 세가지의 공통점은 얼굴에 있는 것이다.
그래서 이 세가지를 변수로 가지고 있는 추상클래스 얼굴.class를 만든다.

특정 부분이 구체화가 되지 않은 클래스
객체 생성 X , 상속을 목적으로 사용한다.

  • 추상메소드를 하나 이상 가지고 있는 클래스

추상메소드 ex) 이름만 정의하고 바디 없음;

abstract void (){ 

}

추상클래스를 상속받는 서브클래스의 할일
1. 추상메소드를 오버라이딩 하거나,
2. 추상메소드를 오버라이딩 하지않고 추상클래스가 된다.
첫번째 예시에서 얼굴.class 를 상속받는 코.class가 있다면, 추상메소드를 넘겨받고 이를 구체화 시켜야한다.

추상클래스의 장점

  1. 공통된 메서드와 필드를 사용할 수 있다.

통일성, 유지보수성 증가

  1. 실체클래스 구현시, 시간절약

자동차 클래스를 구현한다고 생각하면 자동차 클래스를 추상클래스로 만들고 이를 상속받는 엔진, 바퀴, 도색 클래스를 구체화 하면 설계시간은 적게 들고, 구현하는데만 집중하면 된다.

3.규격에 맞는 자식클래스 구현

아무리 자식클래스가 자기 스타일대로 구현한다고 해도, 부모클래스가 준 필드, 메서드를 사용해야 하고, 추상메서드(컴파일 에러)로 실행조차 막기 때문에 이는 곧 규칙에 맞는 클래스 구현으로 이어진다.

내부클래스

anony inner class 로 만들 경우에는 객체생성이 가능.

0개의 댓글