반응형
이번 포스팅에서는 클래스 상속과 재정의, 그에 대한 예제들을 확인해볼 수 있다.
1. 상속
1) 상속의 개념
: 기존에 사용중인 클래스의 필드들을 새로 만든 클래스에 가져와서 자신의 것 처럼 사용할 수 있는 개념이다.
다중상속은 불가능하므로, 한 개의 클래스에서만 상속 받을 수 있다.
2) 선언 방법
class A{
A필드
}
class B extends A{
A필드, B필드
}
class A : 부모클래스, 상위클래스, 슈퍼클래스, 기반클래스
class B : 자식클래스, 하위클래스, 서브블래스, 파생클래스
main{
B b = new B();
b.A클래스와 B클래스의 필드를 모두 사용 할 수 있다.
부모 자식
}
2. Overriding : 재정의, 무시하기, 덮어쓰기
1) super와 super( )
super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수입니다.
인스턴스 변수의 이름과 지역 변수의 이름이 같을 경우 인스턴스 변수 앞에 this 키워드를 사용하여 구분할 수 있었습니다.
이와 마찬가지로 부모 클래스의 멤버와 자식 클래스의 멤버 이름이 같을 경우 super 키워드를 사용하여 구별할 수 있습니다.
이렇게 자바에서는 super 참조 변수를 사용하여 부모 클래스의 멤버에 접근할 수 있습니다.
this와 마찬가지로 super 참조 변수를 사용할 수 있는 대상도 인스턴스 메소드뿐이며, 클래스 메소드에서는 사용할 수 없습니다.
<출처 : http://www.tcpschool.com/java/java_inheritance_super>
//부모클래스
class Human{
String name;
int age;
Human(String name, int age){
this.name = name;
this.age = age;
}
}
//자식클래스
class Student extends Human{
int score;
Student(String name, int age, int score){ //부모생성자input + 자식생성자input
super(name, age); //부모생성자input
this.score = score;
}
}
*생성자 선언 단축키 : alt + shift + S + O*
2) 다형성
: 자식클래스에 부모클래스와 동일한 이름의 메서드가 존재한다면, 선택된 객체에 따라 메서드가 다르게 출력된다.(overloading)/ 따라서 동일한 이름의 메서드이지만 다른 내용을 삽입하게 되면(overriding) 각 객체에 맞게 삽입된 내용으로 출력된다.(overloading)
3. 예제
: book클래스를 상속받는 만화클래스, 전공서적클래스를 각각 생성하고 void info()를 통해 각각의 정보를 출력할것.
book클래스 : 책제목, 저자, 가격, 카테고리 / 만화클래스 : +줄거리 / 전공서적클래스 : +과목
package class01;
class Book{
//멤버변수
String name;
String writer;
String category;
int price;
//생성자
Book(String name, String writer, int price){
this.name = name;
this.writer = writer;
this.price = price;
this.category = "[ ]";
}
void info() {
System.out.println("책제목: " + name + "\n작가: "+ writer+ "\n가격: " + price + "\n카테고리: " + category);
}
}
//전공서적 클래스
class Major extends Book{
String major;
Major(String name, String writer, int price, String major){
super(name, writer, price);
this.category = "전공";
this.major = major;
}
void info() {//메서드 재정의 : overriding
System.out.println("\n책제목: " + name + "\n작가: "+ writer+ "\n가격: " + price + "\n카테고리: " + category + "\n과목: " + major);
}
}
//만화 클래스
class Cartoon extends Book{
String story;
Cartoon(String name, String writer, int price, String story){
super(name, writer, price);
this.category = "만화";
this.story = story;
}
void info() {//메서드 재정의 : overriding
System.out.println("\n책제목: " + name + "\n작가: "+ writer+ "\n가격: " + price + "\n카테고리: " + category + "\n줄거리: "+story);
}
}
public class Test06 {
public static void main(String[] args) {
Major m1 = new Major("기초수학", "남혜원", 16000, "수학");
Major m2 = new Major("수학 맛있게 익힌 책", "남예원", 16500, "수학");
Cartoon c = new Cartoon("남극에서 살아남기", "김땡땡", 12000, "남극에 표류된 주인공이 어떻게든 살아남는 내용,,");
m1.info();
m2.info();
c.info();
}
}
반응형
'JAVA' 카테고리의 다른 글
[다형성] 추상클래스 & 인터페이스 (0) | 2022.01.01 |
---|---|
[다형성] 클래스배열 & Casting (0) | 2022.01.01 |
[클래스] 제어자 & 필드의 구분 (0) | 2022.01.01 |
[클래스] 객체지향 코딩 & 생성자 (0) | 2022.01.01 |
[알고리즘] 퀵정렬 (0) | 2021.12.31 |