목차

public interface A {
String a = 1; // a는 바꿀 수 없음
void X(); // 오버라이딩을 무조건 해라
default String Y() { // 디폴트는 이거고 오버라이딩할 수 있다
return null;
}
static void Z() { // Z는 바꿀 수 없음
System.out.println("스태틱 함수");
}
}
----
public class AA implements A {
@Override
public void X() {
System.out.println("추상 메소드 오버라이딩");
}
...
public void Hongseok() {
System.out.println("좋은 개발자 되고 싶어요");
}
}
-----
public abstract class B {
protected String W(); // 자식 클래스에서 무조건 구현해라
}
-----
public class BB extends B {
protected String W() {
System.out.println("재밌게 개발하고 싶어요");
}
}
public class C {
@Autowired
List<A> as;
public void doSomething() {
for (i = 0; i< as.length; i ++) {
as.get(i).X();
}
}
}