본문 바로가기
IT Study/따즈아 Java & Java 기초

따즈아 java 멘토 시리즈 26강 - 추상메서드/추상클래스

by hhyyyjun 2022. 12. 27.

1. 추상메서드

선언부만 정의하고 구체적인 내용은 비워놓은 메서드

주의할 점

추상메서드가 있는 클래스를 상속받는 자식클래스는 반드시 부모 클래스의 추상메서드를 구현해야 한다.

구조

abstract 리턴타입 메서드명(); //구현하지 않으므로 { } 생략하고 ; 으로 마무리

2. 추상클래스

추상클래스는 추상메서드를 맴버(필드)로 갖는 클래스

주의할 점

1) 추상클래스는 일반 메서드 필드에 존재 가능. 단, 추상 메서드를 하나라도 포함해야함

2) 객체를 생성할 수 없음

구조

사용목적

구현은 자식클래스가 하도록 메서드의 기능을 비워놓고 싶을 때 사용


1. Practice - 추상메서드, 추상클래스 사용

public class Shape_Main { public static void main(String[] args) { Shape shapes[] = new Shape[3]; //부모 객체 배열 요소에 자식 값 넣기 >> 업캐스팅 shapes[0] = new Rect(); // 동적바인딩이 일어남 shapes[1] = new Circle(); shapes[2] = new Line(); for(int i=0;i<3;i++) { shapes[i].draw(); } } } abstract class Shape{ //추상클래스 abstract void draw(); //추상메서드 } class Rect extends Shape{ void draw() { System.out.println("사각형을 그리다"); //오버라이딩 } } class Circle extends Shape{ void draw() { System.out.println("원을 그리다"); //오버라이딩 } } class Line extends Shape{ void draw() { System.out.println("선을 그리다"); //오버라이딩 } }

1.1 결과값

2. Practice

public class Abstract_Pokemon { public static void main(String[] args) { Pokemon pokemon = new Pikachu(); //업캐스팅 System.out.println("이 포켓몬은 : "+pokemon.getName()); pokemon.attack(); pokemon.sound(); pokemon = new Squirtle(); System.out.println("이 포켓몬은 : "+pokemon.getName()); pokemon.attack(); pokemon.sound(); } } abstract class Pokemon{ String name; abstract void attack(); abstract void sound(); public String getName() { return this.name; } } class Pikachu extends Pokemon{ Pikachu(){ //default 생성자 this.name = "피카츄"; } @Override void attack() { System.out.println("전기 공격"); } @Override void sound() { System.out.println("피카 피카!"); } } class Squirtle extends Pokemon{ Squirtle(){ this.name = "꼬부기"; } @Override void attack() { System.out.println("물 공격"); } @Override void sound() { System.out.println("꼬북 꼬북!"); } }

2.2 결과 값

댓글