<클래스1-fruit>
//추상클래스(abstract)
//추상클래스는 new로 생성 불가
//추상메서드는 오로지 추상클래스에만 존재 가능
//추상클래스는 일반메서드와 추상메서드 둘 다 존재 가능
abstract public class Fruit {
public static final String MESSAGE="오늘은 즐거운 화요일";
//상수는 가급적으면 올대문자
//일반메서드..추상클래스에는 추상메서드뿐만 아니라 일반메서드도 구현 가능
public void showTitle() {
System.out.println("우리는 추상클래스 공부중~");
}
//추상메서드..미완성메서드(선언부만 있고 몸통{}이 없다)
//오버라이딩이 목적이므로 몸통없이 선언만
abstract public void showMessage();
}
<클래스2-apple>
public class Apple extends Fruit{
@Override
public void showMessage() {
System.out.println(Fruit.MESSAGE); //그냥 MESSAGE도 가능
System.out.println("나는 Apple입니다");
}
}
<클래스3-banana>
public class Banana extends Fruit {
@Override
public void showMessage() {
System.out.println(MESSAGE);
System.out.println("나는 Banana입니다");
}
}
<클래스4-orange>
public class Orange extends Fruit {
@Override
public void showMessage() {
System.out.println(MESSAGE);
System.out.println("나는 Orange입니다");
}
}
<클래스5-FruitInheri_03>
//서브클래스 이용해서 생성
System.out.println("***자식클래스로 생성***");
Apple app=new Apple();
app.showMessage();
Banana ba=new Banana();
ba.showMessage();
Orange or=new Orange();
or.showMessage();
System.out.println("***다형성으로 생성***");
//다형성 처리
//하나의 변수로 여러가지 일 가능
//다형성은 하위클래스로 생성 (super)
//슈퍼클래스(하위클래스) 변수명=new 자식클래스(상위클래스)
Fruit fruit;
fruit=new Apple();
fruit.showTitle();
fruit.showMessage();
fruit=new Banana();
fruit.showMessage();
fruit=new Orange();
fruit.showMessage();
}
}
//결과
***자식클래스로 생성***
오늘은 즐거운 화요일
나는 Apple입니다
오늘은 즐거운 화요일
나는 Banana입니다
오늘은 즐거운 화요일
나는 Orange입니다
***다형성으로 생성***
우리는 추상클래스 공부중~
오늘은 즐거운 화요일
나는 Apple입니다
오늘은 즐거운 화요일
나는 Banana입니다
오늘은 즐거운 화요일
나는 Orange입니다
~~~~~~~~~~~~~~~~~~~~~
(예제)
//추상클래스
abstract class Board{
public abstract void process(); //미완의 메서드
}
class List extends Board{
@Override
public void process() {
System.out.println("게시판의 전체글을 출력합니다");
}
}
class Write extends Board{
@Override
public void process() {
System.out.println("게시판의 글을 쓰고 저장합니다");
}
}
class Update extends Board{
@Override
public void process() {
System.out.println("게시판의 글을 수정합니다");
}
}
class Delete extends Board{
@Override
public void process() {
System.out.println("게시판의 글을 삭제합니다");
}
}
public class AbstractEx_04 {
public static void main(String[] args) {
//Board board=new Board(); //추상클래스는 new로 생성 불가능
Scanner sc=new Scanner(System.in);
int num=0;
Board board=null; //생성해줄 부모클래스의 참조변수명
while(true)
{
System.out.println("1.쓰기 2.출력 3.수정 4.삭제 5.종료");
num=sc.nextInt();
//다형성
switch (num) {
case 1:
board=new Write();
break;
case 2:
board=new List();
break;
case 3:
board=new Update();
break;
case 4:
board=new Delete();
break;
default:
System.out.println("종료합니다");
System.exit(0); //0은 자바의 정상적인 종료, 나머지 숫자는 비정상적 종료
}
board.process();
}
//결과
1.쓰기 2.출력 3.수정 4.삭제 5.종료
1
게시판의 글을 쓰고 저장합니다
1.쓰기 2.출력 3.수정 4.삭제 5.종료
4
게시판의 글을 삭제합니다
1.쓰기 2.출력 3.수정 4.삭제 5.종료
5
종료합니다
'JAVA' 카테고리의 다른 글
210817_Abstract+배열 (0) | 2021.08.17 |
---|---|
210817_인터페이스+다형성 (0) | 2021.08.17 |
210813_상속 (0) | 2021.08.13 |
210813_스캐너+클래스+메서드 (0) | 2021.08.13 |
210813_클래스+배열(예제) (0) | 2021.08.13 |