추상클래스

추상화된 클래스. 추상 메소드는 처리내용을 기술하지 않고 메소드 정의만(인수와 리턴형태) 기술하는 메소드인데 추상 메소드를 가진 클래스를 추상 클래스라고 한다. 이 메소드가 무엇을 하는지는 서브클래스가 상속받은 추상 메소드를 오버라이딩하여 기술한다. 추상클래스, 추상메소드는 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가 보이는 그림책에서 요약 발췌하였습니다.

+ Recent posts