자바공부하기 83.

클래스의 계층구조

 

- 상속으로 인한 클래스의 계층 구조

: 자바의 모든 클래스는 슈퍼 클래스(super class)를 가진다.

: 계층 구조의 위에 위치하는 클래스

* 상위 클래스(super class, parent class)

: 상위클래스를 상속받는 클래스

* 하위 클래스(sub class, childclass)또는 파생클래스(derived class)

 

- 자바에서 최상위 슈퍼 클래스는 java.lang.Object

 

- 명시적으로 지정하지 않으면 모든 클래스는 Object 클래스의 서브 클래스

 

- 자바에서 모든 클래스는 하나이상의 하위 클래스를 가질 수 있으나, 상위 클래스는 하나만을 가질 수 있음.

: 단, final클래스는 하위 클래스를 가지지 못함

 

- 중복 상속 불가

: 단, Interface를 이용한 중복 구현은 가능

 

 

 

자바공부하기 82

상속의 개요

 

- 상속은 객체지향언어의 특성 중에 가장 중요한 개념

: 모듈의 재사용(reuse)과 코드의 간결성을 지원함

: 클래스를 이용하여 다른 클래스를 생성 또는 정의할 수 있음

 

- ex) 자동차가 갖는 일반적인 상태와 행동들을 자동차 클래스로 정의

: 이 자동차 클래스를 확장하여 버스만이 갖는 상태와 행동을 추가하여 새롭게 버스 클래스를 정의

: 크럭만이 갖는 상태와 행동을 추가하여 트럭 클래스, 자가용만이 갖는 상태와 행동을 추가하여 자가용 클래스를 정의할 수 있음

: 자동차 클래스 상위 클래스(super class)

: 버스, 트럭, 자가용 클래스 등은 하위 클래스(sub class)

 

 

자바공부하기 81.

 

overloading vs overriding

 

overloading

- 동일한 클래스 내에서 같은 이름의 메소드를 중복 정의하여 다형성을 지원

- 메서드 이름은 동일하나 매개변수의 형이나 매개변수의 수가 다를 것

 

overriding

- 상속 관계에 있는 클래스간에 메소드를 중복 정의하여 다형성을 지원

- 즉, 메소드 오버라이딩을 이용하면 하위 클래스에서 동일 이름의 메소드를 새롭게 정의 가능

- 매개변수의 형이나 매개변수의 수 모두 동일해야함

 

 

 

메서드의 재정의와 다중 정의를 사용한 예

 

calss A {

...

int m1(int i) {...}

int m2(float f) {...}

...

}

 

class B extends A {

...

int m1(int i) {...}

int m2(float f1, float f2) {...}

int m3() {...}

...

}

 


 

 

 

 

 

자바공부하기 80

 

overriding

 

상위클래스의 일부 메서드가 하위 클래스에 적합하지 않을 경우

: 하위 클래스에서 해당 메서드만 재정의

- 나머지 부분도 재사용될 수 있도록 해줌

 

꼭 필요한 메서드에 대해 그 프로토타입 만을 추상메서드로 정의

: 이를 상속하는 클래스에서 메서드 재정의

 

재사용 가능한 강력한 인터페이스 구축

: 메서드 오버라이딩되면 Super 클래스의 메서드가 가려짐

: 이럴경우 super를 사용하면 Super클래스의 메서드를 사용

 

overriding(메서드 재정의)시 규약

: 인스턴스 메서드일 것

- 즉, static으로 선언되어있지 않아야함

: 메서드의 이름이 일치 할 것

: 매개변수의 개수가 일치할 것

: 매개변수 각각의 자료 형이 일치할 것

: 메서드의 리턴 형이 일치할 것

: 메서드의 접근 제어자가 public 또는 protected일 것

- protected: 하위 클래스에서 호출하거나, 오버라이드 할 수 있는 접근제어자. 하위 클래스가 아닌 다른 클래스는 호출하지 못한다.

- private일 경우 재정의 할 수 있다.

 

 

자바공부하기 79

 

다형성(polymorphism)이란 ?

 


- 다양한 형태의 성질

 

- 다형성의 개념이 적용되는 곳

: 상속(Inheritance)

: 중복정의(Overloading)

: 재정의(Overriding)

: UPcasting

: Abstract의 상속과 Interface의 구현

 

- 동적 메소드 바인딩에 기반

: 동적 메소드 바인딩에는 어떤 메소드를 호출할 지 컴파일 시 지정하지 않고 실행시에 동적으로 결정된다.

: 코드에는 호출할 주소가 아닌, 어떤 메소드를 호출해야 하는지 전체 이름이 적혀있다.

: JVM은 이걸보고 객체 계층을 뒤져 적절한 메소드를 호출한다.

: 그러므로 어느 객체의 어느 메소드가 호출될 지 컴파일 시에는 알 수 없다.

: 컴파일러는 컴파일 시 단지 타입 정보에만 의존하여 에러 체킹을 한다.

 

 

 

자바공부하기78.

계산기 만들기

 

 

 

 

 

 

** 계산기 만드는 간단한 예제입니다.

다들 예제를 통해서 한번 만들어 보세요 ^-^

 

자바공부 파이팅!!

'자바 > JAVA...Spring' 카테고리의 다른 글

자바공부하기 81. overloading vs overriding  (0) 2015.05.19
자바공부하기 79. 다형성이란?  (0) 2015.05.19
자바공부하기 77. static  (0) 2015.05.14
자바공부하기 76. static  (0) 2015.05.14
자바공부하기 75. static  (0) 2015.05.12

자바공부하기 77

 

NewStaticTest.java

 

class NewStaticTest

{

static void staticTest()

{

System.out.println("staticTest()");

}

void newTest()

{

System.out.println("newTest()");

}

public static void main(String[] args)

{

NewStaticTest.staticTest();

NewStaticTest nt = new NewStaicTest();

nt.newTest();

new NewStaticTest().newTest();

}

}

 

 

'자바 > JAVA...Spring' 카테고리의 다른 글

자바공부하기 79. 다형성이란?  (0) 2015.05.19
자바공부하기 78. 계산기 만들기  (0) 2015.05.18
자바공부하기 76. static  (0) 2015.05.14
자바공부하기 75. static  (0) 2015.05.12
자바공부하기 74. Static  (0) 2015.05.11

자바공부하기 76

 

static 멤버 메서드(클래스 메서드)

 

public class StaticMethodAccess {

private static int sint=100 ;

public int nint = 0 ;

public static void setStaticInt(int x){

sint = x ;

}

public static int getStaticInt(){

return sint;

}

public static void main(String[] args){

StaticMethodAccess.setStaticint(33333);

int s = StaticMethodAccess.getStaticInt();

System.out.println("static값은:" +s);

}

}

 

static 멤버 메서드도 객체생성이전에 접근이 가능

 

static 멤버 메서드에는 일반 멤버필드를 사용 할 수 없음(객체 생성 없이)

- 일반 멤버필드는 객체가 생성되면서 메모리를 할당 받음

- static 멤버 메서드는 객체와 연관 없이 사용 (어떤 객체와 연관될지 알 수 없음)

- 다라서 static 멤버 메서드에서는 일반 멤버필드를 사용할 수 없음

- 또한 일반 멤버 메서드도 사용할 수 없음

 

static 초기화 블록

 

 

- StaticTime 클래스명이 사용되는 순간 static블록이 실행

 

 

'자바 > JAVA...Spring' 카테고리의 다른 글

자바공부하기 78. 계산기 만들기  (0) 2015.05.18
자바공부하기 77. static  (0) 2015.05.14
자바공부하기 75. static  (0) 2015.05.12
자바공부하기 74. Static  (0) 2015.05.11
자바공부하기 73. Static  (0) 2015.05.11

+ Recent posts