728x90
반응형
상속의 개념
상속(inheritance)은 실세계의 유전과 비슷하다.
상속을 받으면 부모의 모든 필드와 메소드를 자식이 그대로 받는다.
예를 들어
사람은 먹기, 자기를 할 수 있다.
사람을 상속받은 학생은 부모의 특성을 물려받아 먹기, 자기도 할 수 있을 뿐만 아니라 공부하기도 할 수 있다.
이처럼 상속을 통해 기능을 확장(extends)할 수 있다.
상속을 표현할 때는 extends를 사용한다.
class Person {
public void eat(){
System.out.println("eat");
};
public void sleep(){
System.out.println("sleep");
};
}
class Student extends Person{
public void study(){
System.out.println("study");
}
}
public class Inheritance {
public static void main(String[] args){
Student s = new Student();
s.eat(); //eat
s.sleep(); //sleep
s.study(); //study
}
}
상속은 객체가 아닌 클래스끼리만 일어난다.
상속을 받는 부모를 superclass, 자식을 subclass라고 한다.
JAVA상속의 특징
1. java는 다중상속을 지원하지 않는다.
- c++은 다중상속을 지원한다. 다중상속의 경우 부모 클래스들의 함수 이름이 겹치면 함수의 모호성 때문에 복잡한 문제가 발생한다. 따라서 다중상속을 없앴다.
2. java는 상속에 횟수제한을 두지 않는다.
3. java는 최상위에 java.lang.Object클래스가 있다.
- 모든 객체는 java.lang.Object를 상속받는다.
상속과 생성자
상속을 할 때 생성자의 순서는 어떻게 될까
class A extends B
class C extends B
이 경우 A의 생성자가 실행되고, B의 생성자가 실행되고, C의 생성자가 실행된다.
부모의 생성자를 지정하지 않는 경우
원칙적으로는 부모의 생성자를 지정하여 실행해야 한다.
하지만 부모의 생성자를 지정하지 않을 경우, 기본 생성자가 선택된다.
이때 부모의 생성자에 기본생성자가 없는경우 즉,
매개변수가 있는 생성자만 있으면
컴파일러가 자동으로 기본 생성자를 생성하지 않으므로,
기본생성자가 없어서 에러를 발생시킨다.
부모의 생성자를 지정하는 경우
부모의 생성자는 super()를 사용하여 지정한다.
class A{
A(){ System.out.println("A"); } // 부모의 생성자를 super(a)로 지정하지 않는경우 얘가 선택됨
A(int a) { System.out.println(a); } // A()가 없고 얘만 있는데, super(a)로 지정하지 않는경우 에러
}
class B extends A {
B(a) { super(a) } // 부모의 생성자를 지정, 원칙적으로 이게 맞음
}
public class Inheritance {
public static void main(String[] args){
B b = new B(5); // 5
}
}
728x90
반응형
'java' 카테고리의 다른 글
[java] 컬렉션과 제네릭에 대해 알아보기 (0) | 2021.11.03 |
---|---|
[JAVA] 추상클래스, 추상메소드와 인터페이스의 개념과 차이점 (0) | 2021.10.21 |
eclipse오류 해결 (0) | 2021.09.17 |
springboot 웹프로젝트 생성 오류 해결 (0) | 2021.09.03 |
springboot 프로젝트 생성해보기 (0) | 2021.09.03 |