TIL) Java - 클래스 상속

oatraspberry·2022년 12월 8일
post-thumbnail

static 변수

static 변수 = 정적 변수 = 전역 변수

static 예약어 자료형 변수이름

여러 개의 인스턴스가 같은 메모리의 값을 공유하기 위해 사용

static 키워드 (필드) -> 객체생성 없이 바로 사용
static 필드는 힙메모리
객체에는 저장공간이 없음
저장공간은 static 영역에 있음

class A {
	int m = 3; // 인스턴스 필드는 객체를 생성한 후 사용 가능
    static int n = 5; // static 필드는 객체 생성 없이 사용 가능
}
---------------------------------------------------------------------
class A {
	void abc() { // 인스턴스 메서드는 객체를 생성한 후 사용 가능
    	System.out.println("인스턴스메서드");
    }
    
    static void bcd() { // static 메서드는 객체 생성 없이 사용 가능
    	System.out.println("static메서드");
    }
}

static, 인스턴스 메서드

static 메서드

  • 객체생성 없이 '클래스이름.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 불가
    => Math.random(), Math.round()- 객체생성X

인스턴스 메서드

  • 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
  • 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수(iv) 사용 가능
A a = new A();
a.abc(); // 인스턴스메서드 => 객체 생성 후에만 사용 가능

상속

기존의 클래스로 새로운 클래스를 작성하는 것. (코드의 재사용)
두 클래스를 부모와 자식으로 관계를 맺어주는 것.
자손은 조상(부모의 부모)의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외)
자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다.)
자손의 변경은 조상에 영향을 미치지 않는다.
부모클래스의 멤버(필드, 메서드, 이너클래스)를 자식 클래스가 내려받아(상속) 클래스 내부에 포함.
상속 다이어그램을 표기할 때 부모 클래스 쪽으로 화살표가 있음.

UML(Unified Modeling language): 시스템을 모델로 표현해주는 대표적인 모델링 언어

상속을 받으면 부모클래스의 멤버(필드, 메서드, 이너클래스)를 가질 수 있는 이유는 객체 속에 부모클래스의 객체를 먼저 생성하여 포함하기 때문임.

문법

extends 키워드 사용

class 자식클래스 extends 부모클래스 {
	...
}

📢 다중 상속은 불가함. 한 클래스만 상속 받을 수 있다.
부모 클래스가 둘이 될 수는 없지만 자식클래스는 가능.

객체의 다형적 표현

A a1 = new A(); // A는 A이다.
A a2 = new B(); // B는 A이다.

포함 관계

포함: 클래스의 멤버로 참조변수를 선언하는 것
작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다.

상속관계 '~은 ~이다.(is-a)'
포함관계 '~은 ~을 가지고 있다.(has-a)'

// 1. 포함
class Circle {
	Point c = new Point();
    int r;
}

// 2. 상속
class Circle extends Point {
	int r;
}

단일 상속

Java는 단일상속만을 허용한다. (C++은 다중상속 허용)

class TvDvD extends Tv, DVD { // 에러! 조상은 하나만 허용됨.
	//...
}

비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

최상위 클래스 Object - 모든 클래스의 조상

부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다. (ex: extends Object)
모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.

  • toString(): 객체의 정보를 String(문자열)형으로 형변환 해준다.
  • equals(Object obj): 객체끼리 내용을 비교한다.
  • hashCode(): 객체의 주소값을 변환하여 생성한 고유한 정수값. 동일한 객체인지 비교할 때 사용한다.
Object oa = new A(); A aa = new A();
Object ob= new B(); B bb = new B();
		  A ab = new B();
profile
개발자가 될테야

0개의 댓글