목록Java/객체지향 (41)
충분히 쌓여가는
포함(Composite) 클래스의 멤버로 참조변수를 선언하는 것 1번은 Point 클래스와 관계없음 2번은 Circle가 Point를 포함하는 관계 1번과 같이 해도 되지만 2번과 같이 해도됨 차라는 클래스를 만들때 엔진과 문같은 부품을 포함관계로 만들면 복잡도가 낮아지게 된다 class Car { Engine e = new Engine(); Door[] d = new Door[4]; } 코드 class MyPoint { int x; int y; } class Circle { // 포함 MyPoint p = new MyPoint(); int r; } public class InheritanceTest { public static void main(String[] args) { Circle c = new ..
상속(Inheritance) 기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용) 두 클래스를 부모와 자식으로 관계를 맺어주는 것 class 자식클래스 extends 부모클래스 { // ... } class Parent { } class Child extends Parent { // ... } 자손은 조상의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외) 자손의 멤버 개수는 조상보다 적을 수 없다(=같거나 많다) class Parent { int age; } class Child extends Parent { } 자손의 변경은 조상에 영향을 미치지 않는다 class Parent { int age; } class Child extends Parent { void play() { System.out..
멤버변수(iv, cv)는 자동 초기화됨 지역변수(lv)는 수동 초기화 해야됨 class InitTest{ int x; // iv int y = x; // iv void method1() { int; // lv int j = i; // 에러: 지역변수를 초기화하지 않았기 때문 } } 수정된 코드 class InitTest{ int x; // iv int y = x; // iv void method1() { int = 0 ; // lv, 어떤 값이든 넣어 초기화 시켜줌 int j = i; // 에러: 지역변수를 초기화하지 않았기 때문 } } 멤버변수(iv, cv)의 초기화 1. 명시적 초기화(=) (간단 초기화) 대입 연산자 = 사용 class Car { int door = 4; // 기본형 변수의 초기화 ..
생성자 this() 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능하다 생성자에서 다른 생성자 호출 코드 중복제거하기 위해 생성자간 호출함 this에 괄호()가 없이 this만 있다면 참조변수이다, this() ≠ this 생성자 간의 호출이 가능한 조건 1. 생성자의 이름으로 클래스 이름 대신 this를 사용한다 2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능하다 (생성자 내에서 초기화 작업도중에 다른 생성자를 호출하면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화할 것이고 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문) 두 가지 조건을 모두 만족하지 못한 코드 Car(String color) { doo..