자바 또또 반복(객체지향)_6

bitna's study note·2022년 11월 3일
0

자바

목록 보기
115/119

11월 3일

1.인터페이스
(1)추상 메서드의 집합
(2)구현된 것이 전혀없는 설계도, 껍데기(모든 멤버가 public)이다.

interface 인터페이스이름{
	public static final 타입상수이름=값; //상수
    public abstract 메서드이름(매개변수목록); //추상메서드
}

(3)인터페이스의 모든 메서드는 항상 public abstract 이니까 생략이 가능하다.
(4)인터페이스의 조상은 인터페이스만 가능하다(object가 최고 조상 아님)
(5)다중상속이 가능하다(추상메서드끼리 충돌해도 문제가 없기 때문)
예)interface Tv extends smartTv,AudioTv{}

2.인터페이스와 추상클래스의 차이점
인터페이스는 추상메서드 집합이도 인스턴스변수(iv)와 클래스변수(cv)를 가질수 없지만
추상클래스는 일반클래스에 추상메서드가 있는 형태로 인스턴스변수(iv)와 클래스변수(cv)를 가질수 있다.즉 일부만 미완성된 설계도 이다.

3.인터페이스의 구현
(1)인터페이스에 정의된 추상 메서드를 완성 하는 것
예) class 클래스이름 implements 인터페이스이름{
//인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}
(2)일부만 구현하는 경우, 클래스앞에 abstract를 붙여야 한다.

4.인터페이스는 이중 상족이 가능하다.
왜?구현부가 없기 때문이다. 보통 충돌이 나는 경우는 선언부는 같지만 구현부가 달라 어떤걸 써야할지 애매하기 때문

class Fighter extends Unit implements Fightable{
	public void move(int x, int y){}
	public void attack(Fightable f){}
}

fighter클래스가 Fightable 인터페이스를 구현한 Unit클래스를 상속받았음.
위와 같이 된다면 메인에서 아래와 같이 객체를 생성시

Unit u = new Fighter();

자손인 Fighter객체를 조상타입의 참조변수로 가르키는거 가능

Fightable f = new Fighter();

자손인 Fighter객체를 Fightable인터페이스로 가르키는거 가능하나, Fightable인터페이스에 있는 추상메서드만 사용가능.
즉,인터페이스 참조변수로 인터페이스를 상속받아 구현한 객체를 가르키는게 가능함!

public void attack(Fightable f){...내용...}

인터페이스 Fightable을 구현한 객체만 Fightable의 매개변수로 들어갈수 있음.
리턴타입 또한 Fightable로 설정했다면 Fightable를 구현한 모든객체는 해당된다는 의미.즉 다형성으로 형변환한 자손객체도 가능하다는 의미이다.

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보