일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Express
- 코딩
- Java객체배열
- Java다운캐스팅
- db
- 자바 Random클래스
- Java try-catch
- 자바 추상메서드
- 자바 내부 클래스
- 자바 제어문
- 데이터베이스
- 자바 String클래스
- java super( )
- Java업캐스팅
- database
- 자바 try-catch
- Java추상클래스
- 자바 Wrapper클래스
- 자바 예제
- 자바 문자열 클래스
- 자바 스트링클래스
- nodejs
- Java 내부 클래스
- Java문자열 클래스
- oracle
- dbeaver
- Java 추상 메서드
- DBMS
- Java thorw
- 오라클
- Today
- Total
코딩이란 무엇일까
[Java/자바] 상속과 다형성 본문
안녕하세요~ 오늘은 자바 클래스의 상속과 다형성에 대해 알아볼까 합니다~
상속이란?
상속은 말 그대로 부모 클래스의 기능을 자식 클래스가 물려받는 것입니다.
상속을 사용하는 이유는?
부모 클래스에서 작성한 기능을 자식 클래스에서 똑같이 작성하지 않고 다시 한번 재사용하기 위함입니다.
한마디로 코드의 "재사용성"이라는 것이죠!!
상속 방법
[구조]
class 클래스명 extends 부모클래스명{
}
상속에는 extends라는 키워드가 사용됩니다. extends를 사용하면 상속을 받을 수 있는 것이지요!
상속 시 주의사항
- 상속 시에는 생성자는 상속되지 않는다
- 다중 상속을 지원하지 않습니다. 간단한 이유는 변수의 중복 때문입니다.
- 클래스 앞 final 키워드는 다른 클래스가 상속 불가
상속 예시
메인 메서드
public class Inheritance1 {
public static void main(String[] args) {
Students st= new Students();
st.breath();
st.learn();
Teacher t=new Teacher();
System.out.println("Teacher 클래스");
t.eat();
t.teach();
}
}
Person 클래스 (부모)
class Person{
void breath() {
System.out.println("숨쉬기");
}
void eat() {
System.out.println("먹기");
}
void say() {
System.out.println("말하기");
}
}
Students 클래스(자식)
class Students extends Person{
void learn() {
System.out.println("배우기");
}
}
Person(부모) 클래스를 상속받았습니다.
void learn() {System.out.println("배우기");}
기능을 추가해 주었습니다.
Teacher 클래스(자식)
class Teacher extends Person{
void teach() {
System.out.println("가르치기");
}
}
Teacher클래스 또한 Person(부모) 클래스한테 상속받았습니다.
void teach() {System.out.println("가르치기") }
위와 같이 부모는 여러 자식 클래스에게 상속해줄 수 있습니다.
하지만 반대로 여러 명의 부모 클래스로부터 상속을 받을 수는 없습니다.
상속을 받으면 아래와 같이 객체를 생성한 뒤 부모의 기능인지 자기 자신의 기능인지 알 수 있습니다.
오버 라이딩
오버 라이딩이란 자식 클래스에서 부모 클래스로부터 물려받아온 메서드를 재정의 하는 것입니다.
오버라이딩 조건은 반드시 클래스 간의 관계가 상속 조건이어야 합니다.
사용목적
부모 클래스에서 상속받은 기능이 재정의 하고 싶을 때 다른 기능으로 바꾸고자 할 때 사용합니다.
근데 만일 이렇게 부모 클래스의 기능을 재정의 즉, 오버라이딩 했는데 부모클래스의 기능도 사용하고 싶다면?
Super라는 키워드를 사용합니다 super. 기능
부모 클래스의 필드 사용방법 ⇒ super
자식 클래스 내 필드 사용방법 ⇒ this
오버 라이딩 예시
메인 메서드
public static void main(String[] args) {
Leader leader=new Leader();
leader.say();
}
}
Student클래스(부모)
class Student{
void learn() {
System.out.println("배우기");
}
void eat() {
System.out.println("밥먹기");
}
void say() {
System.out.println("선생님 안녕하세요~");
}
}
Leader클래스(자식)
class Leader extends Student{
void lead() {}
void say() { //메서드 오버라이딩 => 부모에게 상속받은 메서드를 재정의해주었다.
System.out.println("선생님께 인사!");
super.say(); //부모 클래스의 메서드를 불러옴
}
}
자식 클래스가 부모 클래스의 기능인 say를 오버 라이딩했습니다.
System.out.println("선생님께 인사!");
하지만 이렇게 재정의한 메서드도 사용하고 싶고 부모의 기능도 그대로 사용하고 싶다면?
바로 super.say( ); super라는 키워드로 부모의 메서드를 그대로 가져와 줍니다.
final 클래스
final클래스는 상속이 불가능한 클래스입니다.
final 클래스 예시
package day09;
public class Final_Class {
public static void main(String[] args) {
}
}
final class Parent{}
//오류=>final클래스는 상속 불가 class child extends Parent{}
위와 같이 final 클래스는 상속을 할 수 없습니다.
이상으로 오늘은 자바의 클래스에서 상속, 다형성에 대해 알아보았는데요.
조금 어려울 수 있는 내용이지만 클래스를 계속 활용하다 보면 조금씩 구조가 잡힐 거예요!
그럼 저는 이만 포스팅 마치겠습니다.
감사합니다!!

'Java' 카테고리의 다른 글
[Java/자바]추상 메서드와 추상 클래스 (0) | 2022.10.05 |
---|---|
[Java/자바]다형성(polymorphism),업캐스팅(Upcasting),다운캐스팅(Downcasting) (0) | 2022.10.02 |
[Java/자바]클래스-생성자 (1) | 2022.09.30 |
[Java/자바]객체타입 배열 (1) | 2022.09.30 |
[Java/자바] 클래스(1) 인스턴스(instance) 변수와 클래스변수 (0) | 2022.09.29 |