추상 클래스 (불완전한 클래스)
추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 하위 클래스에서 구현되도록 해놓은 클래스
추상클래스(부모)는 클래스들의(자식) 공통요소들을 가상화 시켜놓는다
객체화는 가능하나 잘 사용하지 않는다 (목적에 어긋난다)
부모 추상 클래스의 역할은 단지 자식 클래스를 만들때 도와주는 역할을 수행하기 위해 존재한다(다형성)
자식클래스에서 사용할 메서드의 이름만 갖고 있다(미구현 상태)
즉, {} 바디를 갖지 않는다 그 메서드를 추상 메서드라고 하며, abstract 키워드가 앞에 붙는다
일반 메서드도 선언 가능하다
abstract 추상클래스명 {
abstract 리턴타입 추상메서드 (매개변수,...);
}
package day21;
public abstract class Shape {
double area;
public abstract void draw(double w, double h);
final static void function() {
System.out.println("추상 클래스의 일반 메서드 입니다");
}
}
class Rect extends Shape{
@Override
public void draw(double w, double h) {
System.out.println("직사각형 점 4개 연결");
area=w*h;
System.out.println("넓이: "+area);
}
}
class Tri extends Shape{
@Override
public void draw(double w, double h) {
System.out.println("삼각형 점 3개 연결");
area=(w*h)/2;
System.out.println("넓이: " +area);
}
}
package day21;
public class Board {
public static void main(String[] args) {
new Rect().draw(10, 50);
new Tri().draw(30, 5.6);
Shape.function(); //클래스로 직접 접근
}
}
직사각형 점 4개 연결
넓이: 500.0
삼각형 점 3개 연결
넓이: 84.0
추상 클래스의 일반 메서드 입니다
Marker Interface
-웹개발, 안드로이드에 많이 쓰인다
클래스들의 공통 그룹명으로 인터페이스를 생성하고 아무것도 구현해놓지 않는다
즉, 그 클래스들이 같은 그룹으로 묶였다는 표시를 하기 위해 사용한다
package marker;
public interface Animation {
}
package marker;
public class Digimon implements Animation{
}
package marker;
public class Pokemon implements Animation {
}
package marker;
public class ZzangGu implements Animation{
}
package marker;
public class HarryPotter {
}
package marker;
public class Check {
public static void main(String[] args) {
Digimon d = new Digimon();
Pokemon p = new Pokemon();
ZzangGu z = new ZzangGu();
HarryPotter h = new HarryPotter();
if(d instanceof Animation) {
System.out.println("디지몬은 애니메이션 입니다.");
}
if(p instanceof Animation) {
System.out.println("포켓몬은 애니메이션 입니다.");
}
if(z instanceof Animation) {
System.out.println("짱구는 애니메이션 입니다.");
}
if(!(h instanceof Animation)) {
System.out.println("해리포터는 애니메이션이 아닙니다.");
}
}
}
디지몬은 애니메이션 입니다.
포켓몬은 애니메이션 입니다.
짱구는 애니메이션 입니다.
해리포터는 애니메이션이 아닙니다.
728x90
'Dev. > java' 카테고리의 다른 글
Java :: 내부클래스 (inner class) (0) | 2022.07.16 |
---|---|
Java :: 인터페이스 (0) | 2022.07.03 |
[Java] TMS 대중교통 터미널 시스템 만들기 (0) | 2022.06.17 |
Java 추상 클래스 (0) | 2022.06.12 |
Java :: 다형성/ 싱글턴 패턴 (0) | 2022.06.12 |
댓글