4월 27일 내용정리
1.익명 클래스(Anonymous class)
부모클래스명 참조변수 = new 부모클래스명(){자식클래스의 내용};
한마디로 자식클래스를 따로 만들지 않겠다.
2.보통은 부모클래스만들고 자식클래스를 만들어 상속받고-> 다형성하여 객체생성 이걸 한줄로 편하게 만든것
부모클래스명 참조변수 = new 부모클래스명(){자식클래스의 내용선언};
이때 자식클래스의 이름이 없어서 생성자또한 없기때문에
부모로 형변환 하여 부모생성자를 가져다 사용하며, 단 1회성으로 사용할때 익명클래스를 쓴다.
3.보통은 부모인터페이스를만들고 자식클래스를 만들어 상속받고-> 다형성하여 객체생성
이걸 한줄로 편하게 만든것
부모인터페이스 참조변수 = new 인터페이스(){자식클래스의 내용선언};
이때 자식클래스의 이름이 없어서 생성자또한 없기때문에
부모로 형변환 하여 부모생성자를 가져다 사용하며, 단 1회성으로 사용할때 익명클래스를 쓴다.
4.익명클래스는 매개값으로 넘겨줄수도 있다.
부모클래스
package study_0427;
public class Bird {
void move() { //메서드 선언
System.out.println("새가 움직인다.");
}
}
익명클래스-1
package study_0427;
public class Anonymous1Demo {//익명클래스의 외부클래스
Bird e =new Bird() { //자식클래스의 내용적음
public void move() { //자식클래스의 메서드-1
System.out.println("독수리가 난다~~");
}
public void sound() {//자식클래스의 메서드-2
System.out.println("휘익~~~");
}
};
//메인메서드
public static void main(String[] args) {
//익명클래스의 외부클래스의 객체 생성
Anonymous1Demo a= new Anonymous1Demo();
//메서드 호출
a.e.move();
}
}
익명클래스-2
package study_0427;
public class LocalDemo {
public static void main(String[] args) {
class Eagle extends Bird{ //상속받은 내부 클래스
public void move() { //내부클래스 메서드
System.out.println("독수리가 난다~~");
}
}
Bird e = new Eagle();
e.move();
//=============================================================
Bird b= new Bird() {
public void move() {
System.out.println("독수리가 난다~~");
}
};
b.move();
//=============================================================
new Bird() {
public void move() {
System.out.println("독수리가 난다~~");
}
}.move(); //b.move(); 와 같은 의미 임, 다만 객체를 변수에 담는 과정이 생략되고 바로 부름
}
}
외.내부클래스 및 비교용 기명클래스
package study_0427;
public class MemberDemo { //외부클래스
class Eagle extends Bird { //상속 클래스 내부클래스
public void move() { //내부클래스의 메서드-1
System.out.println("독수리가 난다~~");
}
public void sound() { //내부클래스의 메서드-2
System.out.println("휘익~~~");
}
}
Eagle e =new Eagle(); //자식클래스 객체생성
public static void main(String[] args) {
MemberDemo m = new MemberDemo();//외부클래스 객체생성
m.e.move(); //외부클래스 주소->자식클래스 주소->move() 메서드호출
m.e.sound(); //외부클래스 주소->자식클래스 주소->move() 메서드호출
}
}