interface Nose {
public int iMethod();
}
abstract class Picasso implements Nose {
public int iMethod() {
return 7;
}
}
class Clowns extends Picasso { }
class Acts extends Picasso {
public int iMethod(){
return 5;
}
}
public class Of76 extends Clowns {
public static void main(String[] args) {
Nose[] i = new Nose[3];
i[0] = new Acts();
i[1] = new Clowns();
i[2] = new Of76();
for(int x = 0 ; x < 3 ; x++) {
System.out.println(i[x].iMethod() + " " + i[x].getClass());
}
}
}
------------------------------------------------------
cf. 8장 내용 정리
//p.240 - (8장 인터페이스와 추상 클래스)
public void go() {
ArrayList al = new ArrayList();
Dog d = new Dog();
al.add(d);
int indext = al.indexOf(d);
Object o = al.get(index);
}
//p.244 - (8장 인터페이스와 추상 클래스)
Object o = al.get(index);
Dog d = (Dog) o:
d.roam();
if ( d instanceOf Dog) {
Dog d = (Dog) o;
}
//p.252 - (8장 인터페이스와 추상 클래스)
interface - 모든 메소드를 추상 메소드로 만드는 것
public interface Pet {
public abstract void beFriendly();
public abstract void play();
}
public calss Dog extends Canine implements Pet {
//Dog도 Pet이므로 Pet의 메소드를 반드시 구현해야 한다.
public void beFriendly(){
System.out.println("beFriendly()");
}
public void play() {
System.out.println("play()");
}
// 일반적으로 오버라이드 하는 메소드
public void roam() {
System.out.println("roam()");
}
public void eat() {
System.out.println("eat()");
}
}
//p.254 - (8장 인터페이스와 추상 클래스)
한 클래스에서 인터페이스 여러 개를 구현할 수도 있다.
public class Dog extends Animal implements Pet, Saveable, Paintable { ... }
//p.255 - (8장 인터페이스와 추상 클래스)
한 클래스에서 인터페이스 여러 개를 구현할 수도 있다.
1. 클래스를 만들 때 인스턴스를 만들 수 없게 하고 싶다면 abstract 키워드를 사용한다.
2. 상속 트리에서 처음으로 나오는 구상 구사 클래스에서는 반드시 모든 추상 메소드를 구현해야 한다.
3. interface의 모든 메소드는 자동으로 public 메소드, abstract 메소드가 되기 때문에 interface를 구현하는 클래스에서는 interface에 들어 있는 모든 메소드를 구현해야 한다.
4. 자바 클래스에서는 부모(상위클래스)가 하나밖에 있을 수 없고 그 부모 클래스나 자식 클래스가 어떠해야 하는지를 정의하게 된다.
그러나 interface는 여러 개를 구현할 수 있다.
//p.256 - (8장 인터페이스와 추상 클래스)
Object 클래스는 다음 함수를 같고 있다.
equals()
getClass()
hashCode()
toString()