JAVA

210817_추상클래스+다형성

요옫 2021. 8. 17. 14:33

<클래스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