-
[포스코x코딩온] Java(클래스의 상속, 오버라이딩, 추상 메소드, 추상 클래스)[포스코x코딩온] 웹개발자 풀스택 부트캠프8기 2023. 10. 25. 09:08728x90
클래스의 상속
- 부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려받는 것
- 장점
- 멤버의 중복 작성 제거
- 클래스의 계층적 분류 가능
- 클래스의 재사용과 확장성 용이
- 사진처럼 신분별로 클래스를 정의했다고 했을 때, "말하기, 먹기, 걷기, 잠자기"의 행동은 모든 신분에서 동일하게 정의된다.
- 이를 계층화하여, 아래와 같이 표현이 가능하다.
- Person이라는 부모 클래스를 만들고 Student, Researcher, ... 클래스에서 상속받도록 하는것
- Person을 부모클래스 혹은 슈퍼클래스라고 하고, Student를 자식 클래스 혹은 서브 클래스라고 한다.
- 상속 문법
- extends 키워드 사용
public class Person{ ... } public class Researcher extends Person{ ... } public class Professor extends Researcher{ ... } public class Student extends Person{ ... }
메소드 오버라이딩
- 오버라이딩이란, 슈퍼 클래스의 메소드를 서브 클래스에서 재정의 하는 것
- 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것을 동일하게 작성
Student클래스는 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'[포스코x코딩온] 웹개발자 풀스택 부트캠프8기' 카테고리의 다른 글
[포스코x코딩온] Java (Wrapper 클래스, 오토박싱과 오토언박싱, 제네릭, 와일드 카드, 컬렉션) (0) 2023.10.26 [포스코x코딩온] Java(인터페이스, 다형성) (1) 2023.10.25 [포스코x코딩온] Java - 예외처리 (0) 2023.10.24 [포스코x코딩온] Java(객체지향, 클래스, 메소드, 접근 제어자,static, getter & setter) (0) 2023.10.23 [포스코x코딩온] JAVA- 표준배열(2차원 배열, arrays 메소드) (1) 2023.10.21