1. 상속
1) 특징
- 부모의 private변수, 생성자는 상속이 안됨
- 모든 class의 최상위 부모는 Object // extends Object는 생략되어 있음
- class가 생성될 때 상속이 있다면 최상위 부모부터 생성됨 // 부모의 변수를 자식이 상속받아 사용해야하기 때문
2) 생성자 호출 형태
// 다른 class에서 객체 생성 시
new class();
// 자식 class에서 부모생성자 호출 시
// 반드시 자식 생성자 첫 줄에 쓴다
super();
// 같은 class의 특정 생성자에서 다른 생성자 호출
this();
* overloading된 생성자들은 params로 구분되어 호출된다.
3) 활용 형태
- Object의 toString()
참조변수를 print할 때 자동으로 toString()으로 호출된다. 즉, 사용자가 정의한 클래스의 toString()을 override하면 명시적인 호출없이 원하는 정보가 출력 가능하기에 자주 활용된다.
// 기존 toString
public String toString(){
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}
// override 예시
@Override
public String toString(){
return "클래스 이름 : " + getClass().getName() + "변수1 : " + var1;
}
2. 다형성(Polymorphism)
하나의 변수로 여러가지 타입 참조 가능
// if class Cat, Dog, Bird extends Pet
Pet pet = new Cat();
pet = new Dog();
Pet[] pet = { new Cat(), new Dog(), new Bird(), ... };
Object[] obj = { 1, 'a', "hello", new Cat(), ... (anything)};
// overloading params : 다형성의 가장 대표적인 활용
public static void setData(Object obj){ ... }
* Pet은 Cat, Dog, Bird의 부모이므로 참조 가능
* Object는 모든 class의 최상위 부모이기 때문에 모든 타입 참조 가능
* setData method의 params에 어떤 타입이든 넣을 수 있다.
// 다형성 + 반복문
for(Pet pet : pets){
if(pet instanceof Cat){ ... }
}
// 다형성 + 반복문 + 형변환
for(Pet pet : pets){
if(pet instanceof Cat{
Cat cat = (Cat)pet;
sysout(cat.getColor); // getColor : Pet에는 없고 Cat에만 있는 method (Cat extends Pet)
}
}
3. 캡슐화(은닉화)
- private 접근제어자로 접근 통제
- class 내에서만 사용되는 method를 private로 설정하면 복잡성이 줄어드는 효과를 얻는다.
'CS > JAVA' 카테고리의 다른 글
[JAVA] Anonymous class, Lambda Expression, Generics (0) | 2021.01.14 |
---|---|
[JAVA] Abstract, Interface (0) | 2021.01.12 |
[JAVA] 데이터의 메모리 할당 순서 (0) | 2021.01.12 |
[JAVA] 변수와 메서드 (0) | 2020.10.30 |
[JAVA] 변수 : 타입 (0) | 2020.10.11 |