학습 목표
1. 인터페이스에 개념을 이해하자.
2. 인터페이스와 추상클래스를 사용해서 코드 작성해보기
1. 인터페이스에 개념을 이해하자.
● 모든 메서드가 추상 메서드로 선언됨 public abstract
● 모든 변수는 상수로 선언됨 public static final
package com._interface;
//HOW-interface를 선언하며 된다.
//여기안에 선언된 메서드는 모두 추상메서드가 되어야한다.
//WHY
public interface Animal {
//public interface Animal
//메서드 선언부만 있고 바디가 없다.
public abstract void eat();
//void eat
//생략이 가능하다 . abstract키워드
void move();
//void move();
}
package com._interface;
//인테페이스는 구현받다. 구현하다.(생성이라는 말을 쓰지 않고)
//Animal이라는 인터페이스를 구현받다.
public class Dog implements Animal {
//public class Dog implements Animal{
//추상클래스를 구현 메서드로 재정의 해야함
@Override
public void eat() {
System.out.println("강아지가 먹이를 먹습니다.");
//@Override
//public void eat
//System,out,ptintln("강아지가 먹이를 먹습니다.")
}
@Override
public void move() {
System.out.println("강아지가 달린다.");
//@Override
//public void move(){
//Sustem.our.println("강아지가 달립니다.")
}
public static void main(String[] args) {
//public static void main(String[] args){
//다형성
Animal dog = new Dog();//업캐스팅
Animal bird = new Bird();//업캐스팅
// Animal dog = new Dog();
// Animal bird = new Bird();
dog.eat();
dog.move();
bird.eat();
bird.move();
}
}
class Bird implements Animal{
//class Bird implements Animal
@Override
public void eat() {
System.out.println("새가 먹이를 먹습니다");
//@Override
//public void eat(){
//System.out.println("새가 먹이를 먹습니다");
}
@Override
public void move() {
System.out.println("새가 하늘을 날아다닙니다.");
//@Override
//public void move(){
//System.out.println("새가 하늘을 날아다닙니다.");
}
}
추상 클래스와 인터페이스를 활용해서 코드를 작성해 보자.
package com._interface;
public abstract class HomeAppliances {
int width;
int height;
String color;
// public void turnOn() {
// System.out.println("전원을 켠다");
// }
//
// public void turnOff() {
// System.out.println("전원을 끕니다.");
// }
}
package com._interface;
public interface RemoteController {
//인터페이스란 구현된것이 아무것도 없는 그림만 있는 기본 설계도이다.
//모든 변수는 상수가 된다. public int final int N;
//모든 메서드는 추상 메서드가 된다. 심지어 abstract도 키워드도 생략가능.
//추상클래스보다 추상화가 더 높다.
//TODO 인테페이스 사용할때 무언가 동작 중심의 클래스를 선언해야할때 사용해야한다.
//인터 페이스는 표준이다. 또는 강제성있는 규약이다.
//오직 static final 상수만을 가질 수 있다.
public static final int SERIAL_NUMBER = 100;
public abstract void turnOn();
public abstract void turnOff();
}
package com._interface;
public interface SoundEffect {
public abstract void soundOn();
}
package com._interface;
//
public class Television extends HomeAppliances implements RemoteController{
@Override
public void turnOn() {
System.out.println("티비 전원을 켭니다.");
}
@Override
public void turnOff() {
System.out.println("티비 전원을 끕니다.");
}
}
package com._interface;
public class Refrigerator extends HomeAppliances
implements RemoteController,SoundEffect{
@Override
public void turnOn() {
System.out.println("냉장고를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("냉장고를 끕니다.");
}
@Override
public void soundOn() {
System.out.println("띠리리리링~~ 냉장고 문이 열림");
}
}
package com._interface;
//장난감 로봇이 가전을 받게 된다면 의미가 맞지 않음!!
//추상 클래스보다 더 유현한 설계 기법인 인터페이스가 있다.
public class ToyRobot implements RemoteController, SoundEffect {
//public class ToyRobot implements RemoteComtroller, SoundEffect{
String name;
@Override
public void turnOn() {
System.out.println("장난감 로봇을 켭니다");
}
@Override
public void turnOff() {
System.out.println("장난감 로봇을 끕니다.");
}
@Override
public void soundOn() {
System.out.println("뚜뚜~~뚜~~뚜뚜");
}
}
package com._interface;
public interface Calc {
//인터페이스는 public abstract생략가능
int add(int n1, int n2);
int sub(int n1, int n2);
int multi(int n1, int n2);
int divide(int n1, int n2);
}
package com._interface;
public abstract class Calulator implements Calc {
}
package com._interface;
public class CompleteCalc extends Calulator {
@Override
public int add(int n1, int n2) {
return 0;
}
@Override
public int sub(int n1, int n2) {
return 0;
}
@Override
public int multi(int n1, int n2) {
return 0;
}
@Override
public int divide(int n1, int n2) {
return 0;
}
}
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA) 추상 클래스(abstract class) - 18 (0) | 2025.04.23 |
---|---|
(JAVA) 스타크래프트 만들어 보기 - ver3 (0) | 2025.04.22 |
(JAVA)다형성(Polymorphism) - 17 (0) | 2025.04.22 |
(JAVA)연관관계(Association) - 16 (1) | 2025.04.22 |
(JAVA)Composition(포함 관계) - 15 (2) | 2025.04.21 |