모든 클래스의 모체가 되는 최상위 클래스이며,
중요 메소드로는 .eqauls(), .toString()등이 있다.
class A{
}
public class Test {
public static void main(String[] args) {
A a = new A();
System.out.println(a);
}
}
println 함수의 정의부분에 들어가보면, Object를 넣게 되면
valueOf(x)함수에 의해 toString()이 실행되며, toString에서는
getClass().getName() + "@" + Integer.toHexString(hashCode());로 정의되어있어,
클래스명@객체의 주소명으로 출력되게 된다.
클래스 이름에 final을 붙이면 더이상 상속이 되지 않게 하겠단 의미이며,
메소드 이름에 final을 붙이면 더이상 오버라이딩이 되지 않게 한다는 의미이다.
interface는 다중상속이 가능하지만, class는 단 하나만 상속 가능가능하다.
출력
From Samsung printer
This is a report about ...
From LG printer
This is a report about ...
소스코드(받은것)
interface Printable { // MS가 정의하고 제공한 인터페이스
public void print(String doc);
}
//SPrinterDriver 와 LPrinterDriver를 만드시오
public static void main(String[] args) {
String myDoc = "This is a report about...";
// 삼성 프린터로 출력
Printable prn = new SPrinterDriver();
prn.print(myDoc);
System.out.println();
// LG 프린터로 출력
prn = new LPrinterDriver();
prn.print(myDoc);
}
구현한 소스코드
// 앞부분은 동일
Class SPrinterDriver implements Printable {
public void print(String doc){
System.out.println("From Samsung Printer");
}
}
Class LPrinterDriver implements Printable {
public void print(String doc){
System.out.println("From LG Printer");
}
}
// 뒷부분 동일
@Override는 어노테이션의 일종으로, 상속받은 메소드라는것을 표시하는데 사용한다.
만약 @Override만 표기해 둔 채로 구현하지 않으면 컴파일 에러가 발생한다.
클래스에 상속되어 구현되기 위한 형식 상의 클래스이며, 상속받은 클래스는 반드시 선언된 클래스를 구현해야한다.
메소드의 선언만 있고 바디(내용)은 없는 것이다.
상수와 메소드
abstract란, interface 내에서 메소드 정의 시, 실제 구현 내용이 없는 메소드를 만들고자 할때 사용하는 키워드이다.
출력 결과
Object obj = new Circle(10);
System.out.println(obj); //출력: 넓이는 100 입니다. (예시)
구현해야할 코드
class Circle {
int radius;
Circle(int radius){
this.radius = radius;
}
public String toString(){
return "넓이는"+radius*radius*Math.PI+"입니다.";
// 만약 값만 리턴하고 싶다면
return String.valueOf(radius*radius*Math.PI);
// 로 설정해주면 된다.
}
}