1. abstract
추상클래스(abstract)
: 추상 클래스의 추상 메서드와 그냥 메서드, 멤버필드, 생성자를 정의할 수 있지만 추상메서드의 내용은 정의할 수 없음
: 추상 메서드를 정의하면 추상클래스를 상속받은 클래스에서는 반드시 추상메서드를 override하여 정의해야 함
: 추상 클래스는 extends로 상속받는다
: 다중 상속은 안돼!
// 추상 클래스 정의
abstract class [클래스명]
// 추상 메서드 정의
[접근제한자] abstract [return 자료형] [메서드 이름] ()
❓예제
public class ExamAbstract {
public static void main(String [] ar){
Tiger tiger = new Tiger("Hodol");
tiger.cry();
tiger.behavior();
System.out.println("사자의 이름은 :" + tiger.animal_name);
Dog dog = new Dog("Mikey");
dog.cry();
dog.behavior();
System.out.println("개의 이름은 :" + dog.animal_name);
}
}
abstract class Animal {
String animal_name;
Animal(String name) {
animal_name = name;
}
public abstract void cry();
public abstract void behavior();
}
class Tiger extends Animal {
public Tiger(String name){
super(name);
// super(name)을 통하여 상위 클래스의 생성자로 보냄
// 추상클래스에서 정의했던 생성자를 이용하고, 추상클래스의 멤버필드인 animal_name에 String name 등록가능
}
@Override
public void cry() {
System.out.println("어흥");
}
@Override
public void behavior() {
System.out.println("우회전");
}
}
class Dog extends Animal {
public Dog(String name){
super(name);
}
@Override
public void cry(){
System.out.println("멍멍");
}
@Override
public void behavior() {
System.out.println("자회전");
}
}
2. Interface
: 추상클래스보다 훨씬 극단적이고 제한적인 성격을 가짐
: 추상메서드와 상수만 포함 가능
: 상속 받을 때 inplements 사용
: 다중 상속 가능
: 인터페이스의 추상메서드는 일반클래스의 메서드 형식과 같지만 몸통은 가질 수 없음
// 인터페이스 선언
interface [이름]
❓예제
public class ExamInterface {
public static void main(String[] ar) {
Door door = new Door();
door.open();
door.close();
door.Red();
door.Blue();
Bottle bottle = new Bottle();
bottle.open();
bottle.close();
}
}
interface OpenCloseIf {
public void open();
public void close();
}
interface PaintIf {
public void Red();
public void Blue();
}
class Door implements OpenCloseIf , PaintIf {
@Override
public void open() {
System.out.println("Door Open");
}
@Override public void close() {
System.out.println("Door Close");
}
@Override
public void Red() {
System.out.println("Paint the door red");
}
@Override
public void Blue() {
System.out.println("Paint the door blue");
}
}
class Bottle implements OpenCloseIf {
@Override
public void open() {
System.out.println("Bottle Open"); }
@Override
public void close() {
System.out.println("Bottle Close");
}
}
인터페이스는 추상클래스의 일종이지만 더 극단적이다!
추상 메서드로만 구성되면 abstract와 다르게 메서드만 정의가 가능하다
공동 작업을 할 때 메서드의 표준화를 시키기 위하여 많이 사용된다고 한다.
+ 서로 다른 클래스를 연결할 때도 사용됨!
참고
http://www.tcpschool.com/java/java_polymorphism_interface
https://commin.tistory.com/106
'뚝딱뚝딱 > Java' 카테고리의 다른 글
[Java] Arrays.sort() 재정의하기 / Comparator 재정의 / 정렬 조건 바꾸기 (0) | 2022.01.19 |
---|---|
[Java] Stream이 뭐야! (0) | 2022.01.18 |
[Java] 클래스 멤버, 인스턴스 멤버 (0) | 2022.01.18 |
[Java][오류] java.lang.NumberFormatException (0) | 2022.01.18 |
[Java] Optional #null 다루는 새로운 방법 (0) | 2022.01.18 |