상속(Inheritance)
특징
- 자식 클래스는 부모 클래스로부터 메소드와 필드를 물려받아 사용
- 부모 클래스는 자식 클래스의 메소드와 필드를 사용하지 못한다
- 부모 클래스는 여러 자식 클래스에게 분할 상속 가능
- 자식 클래스는 단일상속만 받을 수 있다
- 인스턴스 생성시 자식 클래스에서 생성하는 것이 효율적
사용 이유
코드 중복 제거 - > 효율 상승, 다형적 표현(하나의 객체를 여러 방법으로 표현)
사용법
class 자식클래스 extends 부모클래스
포함 관계(composite)
특징
- 클래스의 멤버로 다른 클래스 타입의 참조변수를 선언
사용 이유
상속과 같음
사용법
public class Circle1 extends plane{
Line curve; //포함관계
} //Circle1클래스는 plane클래스를 상속받고, curve와는 포함관계
상속을 사용할지 포함관계를 사용할지 선택하는 방법
선언시 "~는 ~이다" 가 어울리는지, "~는 ~를 가지고 있다" 가 어울리는지 문장을 만들어 보는 것
메서드 오버라이딩(Method Overriding)
특징
- 상속받은 부모 클래스의 메소드를 재정의
- 선언부(메서드 이름, 매개변수, 반환타입)를 상위 클래스와 일치시켜 사용
- 단, 반환타입에 한해서 부모 타입으로 변환할 수 있다면 변경 가능
- 상위클래스의 메서드와 접근 제어자 범위가 같거나 넓어야 한다
- 상위클래스 메서드보다 더 큰 범위의 예외는 선언할 수 없다.
사용 이유
자식 클래스에서 부모클래스의 메서드를 상속받아왔으나 다른 기능을 사용하고자 하는 경우
사용법
Class Parent {
void money() {
System.out.println("부모 클래스의 money() 메소드, 1,000만원");
}
}
class Child extends Parent {
void money() {
System.out.println("자식 클래스의 money() 메소드, 100만원");
}
}
public class Overriding {
public static void main(String[] args) {
Parent p = new Parent();
p.display();
Child c = new Child();
c.display();
Parent p2 = new Child();
p2.display(); // Child c = new Parent();
}
}
/*출력값
부모 클래스의 money() 메소드, 1,000만원
자식 클래스의 money() 메소드, 100만원
자식 클래스의 money() 메소드, 100만원
*/
super, super()
특징
super
- 부모클래스 멤버에 접근시 사용
super()
- 부모클래스 생성자 호출시 사용
- 반드시 첫번째 문장에서 사용
- 클래스를 만들 때는 자동으로 기본 생성자를 생성하는 것을 습관화
사용이유
super
부모클래스의 멤버와 본인(자식클래스)의 멤버를 구분하기 위해 사용
super()
상위 클래스의 생성자를 호출하기 위해 사용
사용법
super
class ParentClass {
int result = 100; // super.result
}
class ChildClass extends ParentClass {
int result = 50; // this.count
void call(){
System.out.println("result = " + result);
System.out.println("this.result = " + this.result);
System.out.println("super.result = " + super.result);
}
}
/*결과
result = 50
result = 50
result = 100
*/
super()
public class Test {
public static void main(String[] args) {
Student s = new Student();
}
}
class Human {
Human() {
System.out.println("휴먼 클래스 생성자");
}
}
class Student extends Human { // Human 클래스로부터 상속
Student() {
super(); // Human 클래스의 생성자 호출
System.out.println("학생 클래스 생성자");
}
}
/* 출력값
휴먼 클래스 생성자
학생 클래스 생성자
*/
Object 클래스
특징
- 자바 클래스 상속계층도 최상단에 위치
사용이유
자주 쓰거나 유용한 기능을 가진 메서드들을 사용하기 편하게 미리 정의해둔 자바 언어의 약속.
사용법
자바에 자동으로 적용되어 있으므로 Object클래스에 포함되어있는 기본적이거나 유용한 메서드들은 각각 사용법을 공부하고, 그 외 나머지는 필요할 때 검색해서 사용
'development > Codestates' 카테고리의 다른 글
23.01.02 bergerQueen만들기-1 (2) | 2023.01.03 |
---|---|
22.12.30 22.12.29 객체지향 프로그래밍 심화-2 (0) | 2022.12.31 |
22.12.28 블로그 세션, 객체지향 프로그래밍 기초-2 (0) | 2022.12.28 |
22.12.27 객체지향 프로그래밍 기초-1 (0) | 2022.12.28 |
22.12.26 시작 (0) | 2022.12.26 |