본문 바로가기
CS/JAVA

[JAVA] 상속, 다형성, 캡슐화

by 두둠칫 2021. 1. 12.

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