추상클래스
추상화된 클래스. 추상 메소드는 처리내용을 기술하지 않고 메소드 정의만(인수와 리턴형태) 기술하는 메소드인데 추상 메소드를 가진 클래스를 추상 클래스라고 한다. 이 메소드가 무엇을 하는지는 서브클래스가 상속받은 추상 메소드를 오버라이딩하여 기술한다. 추상클래스, 추상메소드는 abstract 를 사용하여 정의한다.
abstract class Animal {
String name ;
abstract void cry();
}
서브클래스에서 상속받은 추상메소드를 오버라이딩한다.
class Cat extends Animal {
void cry() { System.out.println("야옹"); }
}
인터페이스
상속관계가 아닌 클래스에 기능을 제공한다. 클래스와 다른 점은 정의와 추상 메소드만이 멤버가 될 수 있다. 인터페이스를 구현하기 위해서는 implements를 사용한다.
interface A {
public static final int a = 2; // 정수
public abstract void say( ); // 추상 메소드
}
아래와 같이 생략가능
interface A {
int a = 2;
say( ) ;
}
인터페이스는 상속관계가 아니기 때문에 몇개라도 구현 가능하다.
class X implements A,B,C {
}
인터페이스는 인터페이스를 상속할 수 있다.
interface B extends A { }
인터페이스는 인터페이스를 다중상속할 수 있다.
interface X extends A,B,C { }
클래스를 상속하고 인터페이스를 구현하는 것을 동시에 할 수 있다.
class C extends A implements B { } // extends 를 먼저 기술한다.
다형성
상속한 클래스의 오브젝트는 슈퍼클래스나 서브클래스로 다룰 수 있다. 하나의 오브젝트와 메소드가 많은 형태를 가지고 있는 것을 다형성이라 한다.
서브클래스의 오브젝트는 슈퍼클래스의 오브젝트에 대입할 수 있다. 반면 슈펴클래스의 오브젝트가 서브클래스의 오브젝트에는 대입할 수 없다.
class A {
int m = 10;
void p() { }
}
class B extends A {
int n = 20;
void p() { }
}
A a = new A();
B b = new B();
b.m = 30;
a = b; // a.m 은 30 이 된다.
서브클래스의 오브젝트는 슈퍼클래스의 오브젝트로 생성할 수 있다.
X a = new Y(); // X 슈퍼클래스, Y 서브클래 스
instanceof 로 지정한 클래스의 오브젝트인지 조사할 수 있다. 동일 방법으로 인터페이스를 구현하고 있는지도 확인할 수 있다.
boolean flag = c instanceof X;
오브젝트 복제
shallow copy : 데이터형 변수 copy, 참조형 변수 공유
deep copy : 데이터형 변수 copy, 참조형 변수 copy
class Person implements Cloneable {
String name; int age;
public Object clone() {
Person a = new Person();
a.name = new String(name);
a.age = age;
return a;
}
Person x = new Person();
Person y = (Person)x.clone();
이 내용은 ANK Co.,Ltd. 저 김성훈 역의 Java가 보이는 그림책에서 요약 발췌하였습니다.
'SW > Java' 카테고리의 다른 글
패키지 랩퍼클래스 시스템프로퍼티 (0) | 2017.01.15 |
---|---|
예외처리 파일스트림 텍스트파일읽기쓰기 (0) | 2017.01.15 |
상속 오버라이딩 접근제한자 (0) | 2017.01.15 |
오버로딩 생성자 메인메소드 (0) | 2017.01.15 |
클래스 Class (0) | 2017.01.15 |