
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 메서드
인스턴스 메서드
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 클래스를 상속받게 된다. (ex: extends Object)
모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
Object oa = new A(); A aa = new A();
Object ob= new B(); B bb = new B();
A ab = new B();