1. 상속
: 기존 클래스의 기능을 사용하여 새 클래스를 만드는 기술
- 자식 클래스는 부모 클래스에 없는 새 필드를 가질 수 있음
- 자식 클래스는 부모 클래스로부터 상속받은 필드를 직접 사용할 수 있음.
- 부모 클래스에 있는 메서드와 이름이 같은 메서드를 자식 클래스에서 재정의 또는 추가 모두 가능.
- 부모 클래스의 메서드를 호출하기 위해 별도의 객체 선언 필요 없음
- 부모 클래스의 생성자를 호출하는 생성자를 정의할 수 있음. * super *
- 자식 클래스는 부모 클래스에 없는 메서드를 가질 수 있으므로 부모 클래스의 보다 나은 버전이 됨.
부모 클래스 : 다른 클래스에 멤버 요소(메서드와 변수)를 상속하는 클래스
= 상위 클래스 = 슈퍼 클래스 = 기본 클래스
자식 클래스 : 다른 클래스의 멤버 요소를 상속받은 클래스
= 하위 클래스 = 서브 클래스 = 파생 클래스
class 자식클래스 extends 부모클래스 {
\\ 멤버 요소
}
+ Is-A 관계
: ~는 ~이다 라는 의미로 상속을 나타내며, 부모-자식 관계라고도 불림
- extends 와 implements 키워드로 구현됨
- 상속은 단방향으로만 이루어짐
2. 상속의 유형
㉮ 단일 상속
: 클래스가 하나의 클래스에 의해서만 확장되는 것
즉, 부모 클래스 하나, 자식 클래스도 하나뿐!!
㉯ 다단계 상속
: 클래스가 하나의 클래스에 상속하고, 상속받은 자식 클래스가 또 다른 클래스에 상속하는 것
㉰ 계층적 상속
: 단일 부모 클래스의 값과 메서드를 여러 자식 클래스에 전달하는 것
즉, 한 클래스가 부모클래스, 나머지가 자식 클래스
※ super를 이용한 부모 클래스 참조 ※
자식 클래스는 부모 클래스를 참조하기 위해 super 키워드를 사용!!
super를 이용한 변수와 메서드 접근 >
public class SuperCat {
String breed = "샴고양이";
String age = "15살";
void printInfo() {
System.out.println("부모 고양이입니다.");
}
}
public class SubKitten extends SuperCat {
String age = "2살";
void printInfo() {
System.out.println("아기 고양이입니다.")
}
void printDetail() {
super.printInfo();
System.out.println("품종은" + breed + ", 나이는 " + age);
}
}
public class Example {
public static void main(String[] args) {
SubKitten objCat = new SubKitten();
objCat.printDetail();
}
}
실행결과 >
부모 고양이입니다. 품종은 샴고양이, 나이는 15살 아기 고양이입니다. 품종은 샴고양이, 나이는 2살 |
super()를 이용한 생성자 접근 >
super() : 부모 클래스의 생성자를 호출하는 명령
public class Parent2 {
String name = "홍길순";
Parent2() {
System.out.println("부모 이름 : " + name);
}
}
public class Child2 extends Parent2 {
String name = "홍길동";
Child2() {
super();
System.out.println("자식 이름 : " + name)
}
}
public class Inheritance {
public static void main(String[] args) {
Child2 objChild = new Child2();
}
}
부모 이름 : 홍길순 자식 이름 : 홍길동 |
3. 다형성
: 하나의 객체가 여러가지 유형을 띠는 것
다형성의 이점
1. 단일 메서드를 다른 클래스에서 다르게 작동 가능
2. 동일한 구현에 대해 다른 메서드명을 선언할 필요 없음
3. 상속을 더 쉽게 구현 가능
- 메서드 오버로딩
: 메서드명이 같지만 다른 매개변수를 사용하는 프로세스
인수의 개수나 유형을 변경함으로써 오버로딩될 수 있음
class CalculateSquare {
public void square() {
System.out.println("No Parameter Method Called");
}
public int square(int width, int height) {
int area = width * height;
return area;
}
public double square(double width, double height) {
double area = width * height;
return area;
}
public double square(int width, double height) {
double area = width * height;
return area;
}
}
public class Polymorphism01 {
public static void main(String[] args) {
CalculateSquare myArea = new CalculateSquare();
System.out.println("가로:10, 세로:5 사각형의 넓이는 " + myArea.square(10,5));
System.out.println("가로:2.5, 세로:4.5 사각형의 넓이는 " + myArea.square(2.5,4.5));
}
}
실행 결과 >
가로:10, 세로:5 사각형의 넓이는 50 가로:2.5, 세로:4.5 사각형의 넓이는 11.25 |
- 메서드 오버라이딩
: 부모 클래스로부터 상속받은 메서드를 자식 클래스에서 특정한 형태로 재정의하는 것
public class Animal {
void eat() {
System.out.println("먹이를 먹다");
}
public void animalSound() {
System.out.println("동물이 소리를 낸다.");
}
}
public class Pig extends Animal {
public void animalSound() {
System.out.println("돼지는 꿀꿀꿀");
}
}
public class Dog extends Animal {
void bark() {
System.out.println("멍멍하고 짖다.");
}
public void animalSound() {
System.out.println("개는 멍멍멍");
}
}
public class Polymorphism02 {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myPig = new Pig();
Animal myDog = new Dog();
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
실행 결과 >
동물이 소리를 낸다. 돼지는 꿀꿀꿀 개는 멍멍멍 |
'Study > Java Study' 카테고리의 다른 글
10장. 패키지 (0) | 2023.05.28 |
---|---|
9장. 추상 클래스와 인터페이스 (0) | 2023.05.22 |
7장. 클래스와 객체 (0) | 2023.05.20 |
6장. 배열과 문자열 (0) | 2023.05.20 |
5장. 메서드 (1) | 2023.04.09 |