//////
Search

220926

상속

기존에 작성되었던 클래스를 재사용하기 위한 문법.
상위 클래스의 변수와 함수를 하위 클래스에서 재사용. 하위 클래스의 객체를 생성하면, 상위 클래스의 멤버까지 사용 가능.
상속을 사용하는 이유 : 코드의 중복 작성을 줄일 수 있음.
소프트웨어 설계 초기 단계부터 고려하는 습관을 들이자!
하위 클래스가 상위 클래스의 멤버를 사용하는 방법!
class B extends A { public B() { super(10, 20); System.out.println(a); // 그냥 쓰기 System.out.println(super.a); // super. 사용! 제일 추천 방법 System.out.println(this.a); // this. 사용! //상위 클래스의 private 멤버 사용법. System.out.println(getAA()); System.out.println(super.getAA()); //제일 추천 방법 System.out.println(this.getAA()); } }
Java
복사

상속과 생성자

상속 관계의 하위 클래스 생성자를 초기화할 시, 상위 클래스 생성자가 먼저 초기화 됨.
하위 클래스에는 상위 클래스에서 상속한 것(상위 클래스의 생성자)가 포함되어 있으므로, 하위 클래스 생성자를 초기화하면 자동으로 상위 클래스 생성자도 초기화 되는 것.
즉, 하위 클래스 생성자에는 자동으로 super(); 가 작성됨.
super?
super : 상위 클래스의 멤버를 사용하고 싶은 때 “super.(멤버)”로 사용
super() : 상위 클래스의 생성자를 호출함.
상위 클래스 생성자에 매개변수가 작성 된 경우(default 생성자가 아닌 경우)
하위 클래스 생성자의 super() 에도 같은 매개변수를 사용하기.
상위 클래스에 default 생성자를 직접 작성하기(습관화 하면 좋음)
class TV{ private int size; public TV(int size) {this.size = size;} // 매개변수를 작성한 상위 클래스 생성자 protected int getSize() {return size;} } class ColorTV extends TV { private int color; public ColorTV(int size, int color) { super(size); // 하위 클래스 생성자의 super()에 같은 매개변수 사용. this.color = color; } }
Java
복사

메소드 오버라이딩

하위 클래스가 상위 클래스의 메소드를 자신의 필요에 맞추어 재정의 하는 것.
상속 관계에서, 동일한 메소드 이름에, 메소드의 내용이 다름.
class Shape { public void draw() { System.out.println("도형을 그립니다."); } } class Rectangle extends Shape { @Override public void draw() { System.out.println("사각형을 그립니다."); // 상위 클래스의 메소드와 동일한 이름, 다른 내용 }
Java
복사

메소드 오버라이딩 vs 메소드 오버로딩

메소드 오버로딩 : 상속과는 관계없이, 매개변수의 데이터 타입과 개수에 따라 동일한 메소드 이름을 가진 메소드가 여러개 생성되는 것.
가장 대표적인 메소드 오버로딩의 예 = System.out.println();

다형성

상속 관계의 두 클래스에서, 하위 클래스가 상위 클래스로 타입 변환 되는 것
즉, (일방향적인) 객체간의 casting.
// 상위 클래스 class Shape { public void draw() { System.out.println("도형을 그립니다."); } } // 하위 클래스 1 class Circle extends Shape{ @Override public void draw() { System.out.println("원을 그립니다."); } } // 하위 클래스 2 class Triangle extends Shape{ @Override public void draw() { System.out.println("삼각형을 그립니다."); } } // 실행 public class Main { public static void main (String[] args) { // 다형성 : 상위 클래스 타입에 하위 클래스 타입 객체 생성 가능.(자동 타입 변환) Shape[] shape = {new Circle(), new Triangle()}; for (Shape s : shape) { s.draw(); // 원을 그립니다. // 삼각형을 그립니다. 출력. } } }
Java
복사
다형성에서 꼭 기억해야할 3가지
1.
부모는 자식이다
2.
무조건 오버라이딩 된 메소드 부터 사용된다.
3.
“자식 타입 = (자식) 부모” 는 일반적으로 불가능
(부모가 자식의 모든 멤버를 가지고 있을 때만 가능)