코드 그라데이션
Day16 (2). 생성자(2), HAS 관계 본문
class B{
//static int a1;
int a1;
int b1;
B(int a, int b){
a1 = a;
b1 = b;
}
}
public class CTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B(5,7); //a1 5 0 b1 7
b.a1 = 20;
//a1 = 20, b1 = 7
//static a1로 바뀌면 B 객체가 100개 만들어지더라도 a는 하나가지고 쓰면 되어서 하나.
//static이면, a는 객체 만들 필요 없이 B.a1 찍으면 사용이 가능함.
}
}
Has 관계
클래스 내부에 다른 클래스의 요소를 가지고 있는 관계
상황설정
Class A{
int a;
String str;
B b;
}
Class B{
int x;
}
A a = new A();
내가 a인데, b를 불러서 B에 있는 x를 쓰고 싶다.
어떻게 해야 할까?
a.b.x??? 될까??? 안 된다.
a.b = new B(); // 이걸 먼저 하고
a.b.x = 20; // 이렇게 값을 집어넣는다.
이러면 x에 20이 들어감.
Class A{
int a;
String str;
B b;
}
Class B{
int x;
}
Class C{
B b = new B();
}
이것도 된다.
우선
Class A{
int a;
String str;
B b; // 여기 있는 b와
}
Class B{
int x;
}
Class C{
B b = new B(); // 이 b
}
는 같은 걸까??
No.
C c = new C();
c.b.x = 30;
이건 될까? Yes
클래스 C에다가 b 객체를 바로 만들잖아.
그래서 만드는 순간 세팅이 되어서 나오는 것이다.
그렇다면
C c = new C();
c.b.x = 30;
C c1 = new C();
C1.b.x = 40;
이 두개는 같은 것인가? No!
=> 객체가 서로 다른데 어떻게 그 안에 있는 것들이 같다고 할 수 있겠는가.
ex)
자동차 안에 바퀴, 헨들 등의 여러가지 요소(클래스)가 포함되어있는 관계라고 생각하면 된다.
자동차 객체
엔진(객체), 바퀴(객체), 핸들(객체)
코드 예시
package Day16;
class C{
int a;
D d;
}
class D{
String str;
}
public class HasTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
C c = new C();
c.d = new D();
c.d.str = "안녕하세요~~~~";
c.a = 10;
System.out.println(c.a+c.d.str);
}
}
실행결과
10안녕하세요~~~
728x90
'Java > Mega' 카테고리의 다른 글
Day19. 문방구 퀴즈 <제품 구매> 공통 코드 (0) | 2023.04.08 |
---|---|
Has 관계 예제 (0) | 2023.04.05 |
Day16 (1). 생성자 (0) | 2023.04.05 |
Day15. 클래스 도입 (0) | 2023.04.05 |
Day14. 재귀함수의 개념 (0) | 2023.04.05 |
Comments