객체(object) = 행위(behavior) + 상태(state) + 정체성(identity)
객체와 객체 사이에는 일정한 관계성이 있다.
객체간의 관계는 'is part of' 나 'has a'의 관계이다.
| 상 | 하 |
|---|---|
| 상위 클래스(super class) | 하위 클래스(sub class) |
| 부모 클래스(parent class) | 자녀 클래스(child class) |
| 기본 클래스(base class) | 파생 클래스(derived class) |
기본 클래스에서 파생 클래스로 상속 받을 때 사용하는 키워드는 extends 이다.
public class subclassname extends superclassname {}
객체 자신에 대한 참조가 필요한 경우 this를 사용하고,
부모 클래스에 대한 참조를 필요로 하는 경우에는 super를 사용한다.
객체 자신에 대한 참조가 필요한 경우 사용
class ThisTest{
int value;
public ThisTest(int value) {
this.value = value; // 변수명의 혼동을 피하기 위해 사용
sendAccess(this); // 클래스 자신에 대한 참조를 다른 메서드에게 전달
}
public ThisTest() {
this(100); // 클래스의 생성자 ThisTest(int value)를 호출
}
}
부모 클래스에서 상속 받은 멤버 중에서 재정의 된 멤버를 참조할 때 사용하거나, 부모 클래스의 생성자를 호출하여 부모 클래스가 가지고 있는 멤버를 초기화 할 때 사용한다.
class MyDialog extends Dialog{
public MyDialog(Frame f) {
// Dialog의 생성자를 호출하여 Dialog의 변수를 초기화
super(f, "dialog Title", true);
}
public boolean handleEvent(Event e) {
if(e.id == Event.WINDOW_DESTROY) {
hide();
dispose();
System.exit(0);
}
else if(e.id != Event.MOUSE_DOWN) {
// 재정의된 Dialog의 메서드 handleEvent를 호출
return super.handleEvent(e);
}
return true;
}
}
클래스 멤버 지시자의 적용 범위
| 지시자 | class 내 | package 내 | subclass 에서 | 외부 접근 |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | O | O | O | X |
| 지시자 없음 | O | O | X | X |
| private | O | X | X | X |
추상 클래스의 작성 규칙
// 추상 클래스
abstract class Animal{
int numOfFoot;
public abstract void run();
public abstract void cry();
}
//-------------------------------------
class Dog extends Animal{
public void run() {
System.out.println("running");
}
public void cry() {
System.out.println("bark!!");
}
}
//-------------------------------------
class Cat extends Animal{
public void run() {
System.out.println("running");
}
public void cry() {
System.out.println("mewing!!");
}
}
Interface 클래스도 추상 클래스와 비슷하지만 차이점이 있다.

public interface ActionListener extends EventListener {
void actionPerformed(ActionEvent e);
}
public interface MouseListener extends EventListener {
void mouseClicked(MouseEvent e);
void mouseEntered(MouseEvent e);
void mouseExited(MouseEvent e);
void mousePressed(MouseEvent e);
void mouseReleased(MouseEvent e);
}
public class MyGUI extends Frame implements ActionListener{
public MyGUI() {...}
public void actionPerformed(ActionEvent e) {
// 이벤트 발생 시 처리할 내용
}
}
Inner 클래스는 클래스 안에 작성하는 클래스를 말한다.
Inner 클래스 에는 지역 Inner 클래스와 Anonymous Inner 클래스가 있다.
이너클래스를 사용하는 이유
// 지역 inner 클래스의 예제
public class Test {
Calc c; // inner 클래스 객체 선언
int x=5;
public Test() {
c = new Calc();
c.print();
}
// inner class
class Calc{
float PI=3.14f;
void print() {
//Test클래스의 x멤버 참조 가능
System.out.println("PI * X=" + PI*x);
}
}
public static void main(String[] args) {
Test at = new Test();
}
}
PI * X=15.700001
클래스 객체 생성 시 객체의 구현사항을 메서드의 괄호 안에서 작성하는 방법으로 이름없는(Anonymous) Inner 클래스를 사용할 수 있다.
button.addActionListener(new ActionListener() {
public void actionPerfored(ActionEvent e)
{
//do something
}
});
패키지는 일정한 클래스들의 그룹을 말하는 데 JVM에서 제공하는 것들도 있고 사용자가 만들어 사용할 수도 있다.
패키지를 사용할 때는 import 키워드를 사용한다.
java.awt
그래픽 사용자 인터페이스를 만드는 데 사용되는 패키지로 메뉴, 버튼, 스크롤바, 색 지정 등에 관련된 패키지
java.io
Java 언어 어플리케이션 프로그램에서 파일 입출력을 처리하는 패키지
java.lang
Java 언어의 기본 패키지로 기본 타입에 대한 정의 Object, Exception, Float, Math, String 등에 관련된 패키지
import 하지 않아도 자동으로 불려온다.
java.net
TCP/IP 클라이언트 서버 네트워킹을 지원하는 Socket, DatagramPacket 등과 HTTP, URL 또는 FTP 등의 프로토콜에 관련된 패키지
java.util
프로그램 중에 만힝 사용될 수 있는 알고리즘에 대한 지원 클래스로 Stack, Dictionary, Vector 등의 클래스를 가지고 있는 패키지
javax.swing
스윙의 기본 패키지로 컴포넌트, 어탭터, 기본 컴포넌트 모델에 대한 클래스를 가지고 있다.
javax.swing.event
java.awt.event 타입 외에 스윙의 특별한 이벤트를 정의하고 있다.