Open jwy411 opened 4 years ago
Static methods, which have the static modifier in their declarations, should be invoked with the class name, without the need for creating an instance of the class, as in
ClassName.methodName(args)
.
Static 메소드는 static
접근자로 선언된 메소드이며, 클레스의 인스턴스 생성 없이 클레스 명 + 함수명
으로 호출할 수 있다.
class StaticMethodClass {
static String name() {
return "StaticMethod";
}
}
class ExtendedStaticMethodClass extends StaticMethodClass { }
interface StaticMethodInterface { static String name() { return "StaticMethod"; } }
interface ExtendedStaticMethodInterface extends StaticMethodInterface { }
public class StaticMethodInheritance { public static void main(String[] args) { System.out.println(StaticMethodClass.name()); // StaticMethod System.out.println(ExtendedStaticMethodClass.name()); // StaticMethod
System.out.println(StaticMethodInterface.name()); // StaticMethod
System.out.println(ExtendedStaticMethodInterface.name()); // error: cannot find symbol
}
}
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
Default Methods
디폴트 메소드를 사용한다면 (이전 버전에 대한) 이진 호환성을 보장하면서 라이브러리 인터페이스에 새로운 기능을 추가 할 수 있다.
*이진 호환성: 클래스를 변경할 때, 그 클래스를 사용하는 클래스들에서 리컴파일 할 필요가 없는것.
인터페이스 안에서
default
키워드를 이용하여 메소드를 선언하면 (참고로 인터페이스에서 선언되는 모든 함수의 접근자는 암시적으로public
이다.)TimeClient
인터페이스를 구현한 모든 클레스를 수정하지 않고 미리 구현된getZonedDateTime
메소드를 사용 할 수 있다.Extending Interfaces That Contain Default Methods (Default 메소드가 정의된 인터페이스 상속하기)
default
메소드가 정의된 인터페이스를 상속하면 다음과 같은 것을 할 수 있다.default
메소드의 접근자를abstract
(인터페이스의 기본 타입)으로 바 꿀 수 있음.default
메소드를 override 할 수 있음.Static Methods
Static 메소드는
static
접근자로 선언된 메소드이며, 클레스의 인스턴스 생성 없이클레스 명 + 함수명
으로 호출할 수 있다.궁금한 것
class ExtendedStaticMethodClass extends StaticMethodClass { }
interface StaticMethodInterface { static String name() { return "StaticMethod"; } }
interface ExtendedStaticMethodInterface extends StaticMethodInterface { }
public class StaticMethodInheritance { public static void main(String[] args) { System.out.println(StaticMethodClass.name()); // StaticMethod System.out.println(ExtendedStaticMethodClass.name()); // StaticMethod
}