728x90
인터페이스
접근제한자 interface 인터페이스이름 {
상수필드
추상메소드
}
- 상수필드와 추상메소드만으로 이루어진 추상클래스의 변형체
- 인터페이스에서 필드는 상수필드이다.
- 인터페이스에서 메소드는 추상메소드이다.
- 구현해야하는 게 있을 때 인터페이스에 틀만 만들어두고 상속하게 된다.
- 인터페이스는 다중상속을 허용.
=> 메소드가 겹치더라도 최종 구현 부분은 실제 구현 클래스에서 기술하기 때문
- 추상클래스보다 좀 더 강한 규칙성, 강제성을 가진다.
추상클래스와 인터페이스
1. 공통점
- 객체 생성은 안되나, 참조변수로 사용 가능(다형성 적용 가능)
- 상속하는 클래스에 추상메소드를 오버라이딩하도록 강제한다.
2. 차이점
- 추상클래스: 클래스 멤버 변수로, 함수 생성이 가능하고 추상메소드가 포함되어 있거나, abstract 키워드를 통해 정의됨
- 인터페이스 : 모든 필드는 상수필드, 모든 메소드는 추상메소드로 정의해야 함
=> 존재하는 목적이 다름
추상클래스는 추상클래스를 상속받아서 기능을 이용하고, 클래스 확장해서 쓸 것
인터페이스는 클래스의 기능(메소드) 구현을 강제하기 위해서 사용
(구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있다.)
728x90
extends 와 implements
- 클래스 간의 상속 관계
자식클래스 extends 부모클래스
- 클래스와 인터페이스의 구현 관계
클래스 implements 인터페이스
- 인터페이스 간의 상속 관계
자식인터페이스 extends 부모인터페이스1, 부모인터페이스2
public interface Basic {
//인터페이스 정의
//인터페이스에서는 무조건 상수필드와 추상메소드밖에 정의가 불가하므로
//접근제한자 예약어 생략 가능!
//상수필스
/*public static final*/ int NUM = 10;
//추상메소드
/*public abstract*/void eat();
/*public abstract*/void sleep();
// => 인터페이스의 모든 필드들은 암묵적으로 public , 상수필드이다.
// => 인터페이스의 모든 메소드들은 암묵적으로 public, abstract이다.
}
>> 예제
public class Mother extends Person implements Basic {
private String babyBirth; // 출산, 입양, 없음
public Mother() {
}
public Mother(String name, double weight, int health, String babyBirth) {
super(name, weight, health);
this.babyBirth = babyBirth;
}
public String getBabyBirth() {
return babyBirth;
}
public void setBabyBirth(String babyBirth) {
this.babyBirth = babyBirth;
}
@Override
public String toString() {
return "Mother [ "+ super.toString() + " , babyBirth : " + babyBirth + "]";
}
@Override
public void eat() { // 밥을 먹으면
// 몸무게 10증가
// 부모의 필드 weight +10
// 수정할 몸무게 == 기존의 몸무게 +10
super.setWeight(super.getWeight()+10);
}
@Override
public void sleep() { //잠을 자면
// 10만큼 건강해짐
super.setHealth(super.getHealth()+10);
}
}
public class Baby extends Person implements Basic {
//필드부 없음
//생성자부 기본생성자, 매개변수 생성자
public Baby() {
}
public Baby(String name, double weight, int health) {
super(name, weight, health);
}
//메소드부
//toString
@Override
public String toString() {
return "Baby["+super.toString()+"]";
}
@Override
public void eat(){
//몬무게 5증가
super.setWeight(super.getWeight()+5);
//건강 5증가
super.setHealth(super.getHealth()+5);
}
@Override
public void sleep() {
//건강 10
super.setHealth(super.getHealth()+10);
}
}
public class FamilyRun {
public static void main(String[] args) {
//Person p = new Person();
// Person은 추상클래스이므로 객체 생성 불가
//다형성 적용 인터페이스 적용 전
/*
Person mom = new Mother("김엄마",50,80,"출산");
Person baby = new Baby("김응애",3.3,90);
System.out.println(mom);
System.out.println(baby);
mom.eat(); //몸무게 +10
baby.eat(); //몸무게 +5, 건강+15
mom.sleep(); //건강 +10
baby.sleep(); // 건강 +10
System.out.println("======다음날======");
System.out.println(mom);
System.out.println(baby);
*/
// 2. 인터페이스 적용 후
//Basic b = new Basic(); //객체 생성 불가능
Basic mom = new Mother("김엄마",50,80,"출산");
Basic baby = new Baby("김응애",3.3,90);
System.out.println(mom);
System.out.println(baby);
}
}
public /*abstract*/ class Person {
// 자바 언어에서의 인터페이스
// 구조체 ( 변수 모아놓음)
// 인터페이스 (추상메소드만 모아놓음)
// 클래스 ( 변수 메소드 모아놓음)
private String name;
private double weight;
private int health;
public Person() {
}
public Person(String name, double weight, int health) {
this.name = name;
this.weight = weight;
this.health = health;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
@Override
public String toString() {
return "name = " + name + " weight = " + weight + " health = " + health;
}
//public abstract void eat();
//public abstract void sleep();
}
728x90
'Programming > JAVA' 카테고리의 다른 글
[JAVA] Math 클래스 / 영어 문장의 첫글자를 대문자로 바꾸는 예제 / 문자열 비교 toString() / equals() / hashCode() (0) | 2023.12.29 |
---|---|
[JAVA] 예외처리 / RuntimeException / ArithmeticException / e.printStackTrace() / Arr (1) | 2023.12.29 |
[JAVA] 다형성(2) / 추상클래스 / 관련 예제 (0) | 2023.12.27 |
[JAVA] 다형성 / 형변환 / 관련 예제 (1) | 2023.12.27 |
[JAVA] 상속 / 오버라이딩 / 관련 예제 (1) | 2023.12.27 |