1. 클래스 배열
: 객체를 여러개 선언해야 하는 경우 배열 타입으로 한번에 선언 후 사용한다.
각 객체는 규칙성이 없기 때문에 규칙성을 부여하기 위해서 사용한다.
2. 클래스 배열 선언
클래스명[] 배열명 = {
new 생성자(),
new 생성자(),
new 생성자(),
...
};
3. 클래스 배열 사용
: 각 방을 하나의 객체로 보아야 한다.
배열명[idx].변수
배열명[idx].메소드();
2. 상속(inheritance)
: 기존에 선언된 클래스의 필드를 다른 클래스에서 사용하고자 할 때
class A{ A의 필드 } class B extends A{ B의 필드 } B obj = new B(); obj 객체는 실제로는 A의 필드와 B의 필드 둘 다 가지고 있다. |
-A : 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스
-B : 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스
자식 클래스 생성자 호출 시 일어나는 일
- 자식 클래스의 객체는 자식 생성자를 호출하여 객체화를 진행한다.
메모리에 자식 클래스의 필드만 올라갔다면 자식 객체로 절대 부모클래스에 있는
필드에 접근할 수 없다. 따라서 자식생성자를 호출하게 되면 부모의 생성자가
자동으로 먼저 호출이 된다.
그 이후에 자식 객체는 부모 필드가 메모리에 먼저 생성되어 있기 때문에
접근할 수가 있게 된다.
>>자식 생성자 첫 줄에는 항상 super클래스의 생성자가 호출된다.
명시적으로 적지 않을시에는 보이지 않지만 super()를 호출한다.
3. 다형성(Polymorphism)
(1) 오버로딩
(2) 오버라이딩(Overriding) : 재정의
- 부모필드에 이미 a()라는 메소드가 존재한다면
자식 객체 생성 시 부모 생성자가 먼저 호출되기 때문에
부모클래스의 a()가 먼저 메모리에 올라간다.
그 다음 자식생성자가 호출될 때 같은 이름의 a()라는 메소드가 선언되어 있다면
같은 이름으로 2개가 만들어지는것이 아니고, 기존에 만들어진 부모필드의 a()메소드에
자식에서 작성한 메소드 내용이 덮어 씌워진다.
그러므로 자식 객체로 a()메소드를 사용하게 되면
재정의된 기능으로 사용하며 이것을 재정의(Override)라고 한다.
4. static (정적)
-static이 붙은 변수, 메소드, 구역 등은 프로그램 실행 시 가장 먼저 메모리에 올라간다.
따라서 static이 붙은 메소드는 내부에서 객체의 필드에 올라오는 일반 전역변수와 일반
메소드는 사용할 수 있다.(메모리에 올라오지 않았기 때문에)
따라서 static이 붙은 전역변수, static이 붙은 메소드, 자기자신 안에 선언된 지역변수만
사용할 수 있다.
-static이 붙은 전역변수, 메소드는 모든 객체가 공유한다. 따라서 static이 붙은 필드는
클래스 이름으로 직접 접근이 가능하다.
-실제로 공유해야 하는 값, 메소드에는 static을 붙여서 선언한다.
(공유하지 않아야 하는 값들에는 절대로 static을 붙이면 안된다.)
<동물 세마리를 만들어서 울게 만들기>
'JAVA > JAVA1' 카테고리의 다른 글
[java1] #10 - Random 함수 (0) | 2022.10.12 |
---|---|
[java1] #09 - 상속 (도로 위 자동차 만들기) (0) | 2022.06.10 |
[java1] #07 - 변수, 클래스, 생성자 (0) | 2021.06.02 |
[java1] #06 - 메소드, 리턴 (0) | 2021.06.01 |
[java1]#05 - 배열, 2차원 배열, 2중 for문 (0) | 2021.05.31 |