⭐추상 클래스
abstract class
추상 메서드를 포함한 클래스
상속에서 사용되는 개념으로
객체로 만들기는 좀 애매할때 사용한다.
class 앞에 abstract가 붙으면 된다.
⭐추상 메서드
선언부만 있고 바디가 없는 형태
예 int add(int x, int y);
void 앞에 abstract가 붙으면 된다.
추상클래스를 (동물 - 인간, 호랑이) 관계를 통해 이해해봤다.
package com.abstract_.animal;
/**
* 4.22 5교시 추상클래스
* <p>
* 추상클래스
* abstract class
* <p>
* 하나 이상의 추상 메서드를 포함한 클래스
* class 앞에 abstract가 뭍으면 추상클래스다.
*
* 강제적으로 타입으로만 설계하는 기법이다.
*
* abstract - 강제성
*/
public abstract class Animal { //추상클래스로 선언됐다.
String name;
public void move() {
System.out.println("동물이 이동한다");
}
//추상메서드를 만들어보자
public abstract void hunt();
/*
클래스 안에
단 하나라도 추상 메서드를 가지고 있다면
그 클래스는 반드시 추상 클래스가 돼야 한다.
*/
}//end of Animal
2. 자식클래스 호랑이
package com.abstract_.animal;
/**
* 4.22 5교시 추상클래스
*
* 추상클래스를 사용하는 이유
*
* 단 하나라도 추상메서드가 있으면 추상클래스다.
*/
public class Tiger extends Animal {
@Override //오버라이드 하자 오류가 없어졌다
public void hunt() {
System.out.println("호랑이가 사냥을 한다");
}
@Override
public void move() {
System.out.println("호랑이가 살금살금 이동한다");
}
}//end of Tiger
3.자식클래스이자 추상클래스인 인간을 설계해봤다.
package com.abstract_.animal;
/**
* 4.22 5교시 추상클래스
*/
public abstract class Human extends Animal{
@Override
public void move() {
System.out.println("사람이 두 발로 걷는다");
}
}//end of Human
4. 인간 클래스의 자식클래스인 사람 클래스를 설계했다.
package com.abstract_.animal;
/**
* 4.22 5교시 추상클래스
*/
public class Person extends Human{
//구현 메서드로 만들어주면 된다.
@Override
public void hunt() {
System.out.println("총으로 동물을 사냥한다");
}
}//end of Person
5. 코드 실행부
추상클래스인 Animal, Human을 인스턴스화 하려고 하자 오류가 발생했다.
package com.abstract_.animal;
/**
* 4.22 5교시 추상클래스
*/
public class MainTest1 {
//main
public static void main(String[] args) {
/*
객체지향 개념으로
Animal이라는 클래스를 인스턴스화하면 좀 이상하다
*/
// animal = new Animal(); // 오류발생
/*
Animal 클래스는
abstract 키워드를 사용해
추상 클래스로 설계됐다.
추상 클래스는
new 키워드 생성자를 활용해서
독립적으로 메모리에 올릴 수 없다.
개발자가 객체를 생성시킬 때
다른 사용자가 마음대로 객체를 생성시키지 못하도록
강제성을 줄 수 있다.
*/
// Human human = new Human(); //오류 발생
}//end of main
}//end of class
예제)
컴퓨터 - 데스크탑, 노트북 - 내노트북
상속관계와 추상클래스 처리 방법을 연습했다.
1. 컴퓨터 클래스
package com.abstract_.computer;
/**
* 4.22 5_1교시 추상클래스
*
* 추상클래스 상속
* 메서드 오버라이드
*
* Computer
* 부모클래스
* 추상클래스
*/
public abstract class Computer {
abstract void display();
abstract void typing();
void turnOn() { System.out.println("컴퓨터를 켭니다"); }
void turnOff() { System.out.println("컴퓨터를 끕니다"); }
}//end of Computer
2-1. 데스크탑 클래스
구현클래스로 설계했다(완)
package com.abstract_.computer;
/**
* 4.22 5_1교시 추상클래스
* 구현클래스
* Computer의 자식클래스
*/
public class DeskTop extends Computer {
void display() { System.out.println("데스크탑 화면을 띄웁니다"); }
void typing() { System.out.println("데스크탑에 문자를 입력합니다"); }
}//end of DeskTop
2-2. 노트북 클래스
추상클래스로 설계했다.
package com.abstract_.computer;
/**
* 4.22 5_1교시 추상클래스
* 추상클래스
* Computer의 자식클래스
*/
public abstract class NoteBook extends Computer {
void typing() { System.out.println("노트북에 글자를 입력합니다"); }
}//end of NoteBook
3. 내노트북 클래스
구현클래스로 설계했다(완)
package com.abstract_.computer;
/**
* 4.22 5_1교시 추상클래스
* 구현클래스
* NoteBook의 자식클래스
*/
public class MyNoteBook extends NoteBook {
void display() { System.out.println("내 노트북 화면을 띄웁니다"); }
}//end of MyNoteBook
4. 코드 실행부
데스크탑과 내노트북 클래스로 객체선언이 정상적으로 되는 것을 확인했다.
package com.abstract_.computer;
/**
* 4.22 5_1교시 추상클래스
* 코드 실행부
*/
public class ComperMainTest1 {
//main
public static void main(String[] args) {
Computer computer1 = new DeskTop(); //다형성
Computer computer2 = new MyNoteBook();
}//end of main
}//end of class
'Java' 카테고리의 다른 글
오브젝트 Object 클래스, 자동으로 상속되는 최상위 클래스 (0) | 2025.04.24 |
---|---|
인터페이스 Interface, 동작을 정의하는 추상타입 (0) | 2025.04.23 |
다형성 Polymorphism, 유연한 코드 작성을 위한 개념 (0) | 2025.04.22 |
연관관계 Association, 포함관계와 비슷하지만 느슨한 개념 (0) | 2025.04.22 |
접근제어지시자 private(-) public(+) protected(#) (0) | 2025.04.22 |