[포스코x코딩온] 웹개발자 풀스택 부트캠프8기
[포스코x코딩온] Java(클래스의 상속, 오버라이딩, 추상 메소드, 추상 클래스)
항상 발전하는 개발자
2023. 10. 25. 09:08
728x90
클래스의 상속
- 부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려받는 것
- 장점
- 멤버의 중복 작성 제거
- 클래스의 계층적 분류 가능
- 클래스의 재사용과 확장성 용이
- 사진처럼 신분별로 클래스를 정의했다고 했을 때, "말하기, 먹기, 걷기, 잠자기"의 행동은 모든 신분에서 동일하게 정의된다.
- 이를 계층화하여, 아래와 같이 표현이 가능하다.
- Person이라는 부모 클래스를 만들고 Student, Researcher, ... 클래스에서 상속받도록 하는것
- Person을 부모클래스 혹은 슈퍼클래스라고 하고, Student를 자식 클래스 혹은 서브 클래스라고 한다.
- 상속 문법
- extends 키워드 사용
public class Person{
...
}
public class Researcher extends Person{
...
}
public class Professor extends Researcher{
...
}
public class Student extends Person{
...
}
메소드 오버라이딩
- 오버라이딩이란, 슈퍼 클래스의 메소드를 서브 클래스에서 재정의 하는 것
- 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것을 동일하게 작성
- 코드
- Person.java
- Object는 원래 생략.
package Java_OOP;
//기본으로 Object를 상속 받는다.
public class Person extends Object{
private String name;
private int age;
//생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
//기존에 Object에 있는 것 내가 마음대로 변경해서 사용한다.
//어노테이션
@Override
public String toString() {
return "Person/ name: " + name + ", age: "+ age;
}
}
- Student.java
package Java_OOP;
public class Student extends Person{
private String major;
public Student(String name, int age, String major) {
//super() : 하위클래스에서 상위클래스 생성자를 호출하는 데 사용.
//super 키워드는 상위 클래스에서 오버라이드된 메소드를 호출하는 데 사용
super(name, age);
this.major = major;
}
@Override
public String toString() {
return "Student/ super: " + super.toString() + ", 전공:"+ major;
}
}
- Main.java
package Java_OOP;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Person 클래스 인스턴스 생성
Person person = new Person("홍길동", 30);
System.out.println(person.toString());
// System.out.println(person.getName());
// System.out.println(person.getAge());
//Student 클래스의 인스턴스 생성
Student student = new Student("이몽룡", 32, "컴퓨터공학");
System.out.println(student.toString());
System.out.println(student.getName());
System.out.println(student.getAge());
}
}
추상 클래스와 추상 메소드
추상 클래스
- 추상 메소드: 선언은 되어 있으나 구현이 되어 있지 않은 메소드
- 추상 메소드를 갖는 클래스는 추상 클래스가 된다.
- 추상 메소드 없이도 추상 클래스를 만들 수 있다.
- 추상 클래스를 상속받는 서브 클래스에서 추상 메소드를 오버라이딩 해줘야 한다.
추상 클래스의 용도
- 설계와 구현 분리
- 슈퍼 클래스에서는 개념 정의
- 서브 클래스마다 다른 구현이 필요한 메소드는 추상 메소드로 선언
- 서브 클래스에서 구체적 행위 구현
- 서브클래스마다 목적에 맞게 추상 메소드를 다르게 구현
추상 클래스의 구현
- abstract 키워드 사용
- 추상 클래스안에 변수를 넣을 수 있다.
public abstract class Person{
private int age;
private String name;
...
abstract public void printName();
}
- 상속 받은 자식 클래스에서는 무조건 추상 클래스에 있는 메소드를 사용해야 한다.
//Student Class
public void printName(){
System.out.println("학생" + getName());
}
※예시
package Java_OOP;
//추상 클래스
abstract class Animals {
//추상 메서드: 하위 클래스에서 구현해야하는 메서드
//Aniaml를 상속받는 클래스들에는 sound가 항상 들어가야 한다.
abstract public void sound();
public void sleep() {
System.out.println("동물이 잠을 잔다.");
}
}
//추상클래스 Animals을 상속받는 Dog클래스
class Chicken extends Animals{
//필수 부분 넣기(sound);
@Override
public void sound() {
System.out.println("꼬꼬댁");
}
}
public class Abstract_ex {
public static void main(String[] args) {
//추상 클래스는 인스턴스로 할당 불가.
// Animals ani = new Animals();
Chicken chicken = new Chicken();
chicken.sound();
chicken.sleep();
}
}
728x90