FireDrago
[java] 상속과 다형성 개념정리 본문
상속
- 클래스와 클래스의 관계에서 상속받는다. > 멤버(변수와 함수)를 물려받는다.
- 상속관계가 성립하면, 코드의 양이 줄어든다.
- 자바는 단일상속만 허용한다. ( 한 클래스는 하나의 조상만을 가진다.)
class Person {
void breath () {
System.out.println("숨쉬기");
}
}
class Student extends Person { // Studendt 클래스는
void learn () { // Person 클래스를 상속받는다. >> Person 멤버 사용가능
System.out.println("배우기");
}
}
오버라이딩
- 상속받은 멤버함수를 자손클래스에서 내용변경하는것
- 이때 메소드의 이름, 반환값, 매개변수의 수와 타입은 변경할 수 없다
.
class Animal {
void sound() {
System.out.println(" ");
}
}
class Cat extends Animal {
@Override
void sound() { //Animal (부모)의 sound( ) 메서드를 자손에서 재정의
System.out.println("야옹");
}
}
제어자
- 클래스나 멤버 (변수, 함수)의 사용을 제어하기 위해 붙인다.
| public | 제한없이 접근 할 수 있음 |
| protected | 같은 패키지 안, 자손 클래스에서 접근 할 수 있음 |
| (default) | 같은 패키지 안에서만 접근 할 수 있음 |
| private | 같은 클래스 내에서만 접근 할 수 있다. |
다형성
- 객체가 다양한 형태를 가질 수 있다는 의미로
- 클래스가 상속관계에 있을때, 부모타입의 참조변수로 자손타입의 객체를 참조할 수 있다.
- 메서드의 매개변수에 부모타입을 주면, 메서드를 호출할때 자손타입의 참조변수를 사용할 수 있다.
class A1 {
void methodA() {
System.out.println("methodA");
}
}
class B1 extends A1{
void methodB() {
System.out.println("methodB");
}
}
public class Ch7_6 {
public static void main (String [] args) {
A1 obj = new B1(); //부모 타입으로 자손 객체 참조 (다형성)
obj.methodA();
}
}
- 부모타입의 참조변수로 자손객체 참조할때
1. 메서드가 오버라이딩 된 경우 >>> 자손의 오버라이딩된 메서드 실행
2. 오버라이딩 되지 않은 경우 >>> 부모의 원래 메서드 실행
class A1 {
void methodA() {
System.out.println("methodA");
}
}
class B1 extends A1{
@Override
void methodA() {
System.out.println("methodB");
}
}
public class Ch7_6 {
public static void main (String [] args) {
A1 obj = new B1(); //다형성
obj.methodA(); // 결과값 "methodB" (오버라이딩 메서드 실행)
}
}
class A1 {
void methodA() {
System.out.println("methodA");
}
}
class B1 extends A1{
//오버라이딩 된 메서드가 없다.
}
public class Ch7_6 {
public static void main (String [] args) {
A1 obj = new B1(); //다형성
obj.methodA(); // 결과값 "methodA" (부모의 메서드 실행)
}
}
- 부모타입의 참조변수로 자손타입의 객체를 참조할때
1. 변수의 경우 부모의 변수를 가져온다.
class A1 {
int a = 10;
}
class B1 extends A1{
int a = 20; // A1 클래스의 'a'와 다른 변수
}
public class Ch7_6 {
public static void main (String [] args) {
A1 obj = new B1(); //다형성
System.out.println(obj.a); // 결과값 "10" (부모클래스의 int a)
}
}
- 부모 클래스에 함수나 변수가 존재 하지 않는 경우 가져 올 수 없다. (에러)
'프로그래밍 > Java' 카테고리의 다른 글
| [java] String 클래스의 유용한 메서드 (0) | 2023.05.03 |
|---|---|
| [java] 인터페이스 예제로 정리하기 (0) | 2023.05.02 |
| [java] 입력받은 이름을 가나다 순으로 정렬하기 (for문 사용) (0) | 2023.04.26 |
| [java] 버블정렬 알고리즘 (0) | 2023.04.25 |
| [java] 피라미드, 역피라미드 만들기 (0) | 2023.04.24 |
