■ 상속(Inheritance)
: superclass의 멤버변수와 메소드를 subclass에 상속
규칙 : 상속을 받는 subclass에서 상속받을 것을 표시
[modifer] class ClassName [extends SuperClassName]{
//상속 받을 변수, 메소드 외에 필요한 것을 선언
}
- 자바는 다중상속을 지원하지 않고 오직 하나의 클래스로 부터만 상속 받을수 있다.
- 메소드 오버라이딩
:상속받은 메소드의 구현내용이 조금 다를경우 상속 받은 메소드를 무시하고
다시 정의할 수 있다.
▲ 규칙: 메소드 이름, 리턴타입, 인자가 같아야 한다.
▲ 오버라이드 하는 이유 : 이름이 다른 메소드를 새로 선언하지 않고 상속 받은 메소드
이름과 같이 다시 선언 하는 이유는 전체적인 기능은 같지만 구현내용이 조금 다른 경우
사용자의 편의성을 높이기 위해 같은 이름으로 선언한다.
- super : SuperClass를 지시하는 지시자로 SuperClass의 생성자를 호출하거나
오버라이드에 의해 무시된 메소드를 호출 할 때 사용된다.
▲ Super Class 생성자 호출
- Sub class의 생성자의 첫번째 라인에서만 호출할수 있다.
super([argument-list]);
- 만약 SuperClass에서 기본생성자가 없다면 상속 받는 subClass의 생성자에서는
인자가 있는 SuperClass의 생성자를 호출하지 않으면 컴파일 에러 발생
▲ 무시된 메소드 호출하기
super.methodName([argument-list]);
■ final : modifier종류로서 클래스, 메소드, 변수에 사용 가능
- 변수 : 상수가 됨=> 변수 선언시 값을 초기화 하고 그 이후 값 변경 불가
- 메소드 : override가 안됨
- 클래스 : 상속 불가
■ abstract : 추상화
-메소드 : 메소드를 구현하기에는 너무 추상적이어서 구현할 수 없을 경우
sub클래스에게 메소드를 구현하게 하는 기능
=> 강제 overried 기능
=> 클래스에 abstract메소드가 있으면 클래스도 abstract으로 선언해야한다.
-클래스 : 클래스 내용이 너무 추상적이어서 객체를 생성해서 사용할수 없어
객체 생성하지 못하게 한다.
■ static : 정적화
=> JVM은 동적으로 클래스를 로딩하고 동적으로 객체를 생성해서 바인딩한다.
그러나 static으로 선언하면 클래스 로딩시 메모리에 로딩되어 객체 생성 없이
사용할 수 있다.
- 멤버변수 : 객체들의 공유 변수
- method : 객체 생성없이 메소드 호출
- 클래스 : 기본 top클래스에서는 선언할 수 없고 nested클래스에서는 선언 할 수 있다.
- 객체 생성 없이 사용할 때
ClassName.method([argument-list])
ClassName.variableName
■ Polymorphism(다형성)
: 상속관계에서 Super 타입의 변수가 sub클래스의 객체를 참조 한다.
Ex)
Employee e1 = new Employee();
e1 = new Engineer();
e1 = new Manager();
Engineer en1 = new Employee(); =>(x)
Engineer en2 = new Manager(); =>(x)
Engineer en3 = new Engineer();
e1 = en3; =>(o) => upcasting
: superclass의 멤버변수와 메소드를 subclass에 상속
규칙 : 상속을 받는 subclass에서 상속받을 것을 표시
[modifer] class ClassName [extends SuperClassName]{
//상속 받을 변수, 메소드 외에 필요한 것을 선언
}
- 자바는 다중상속을 지원하지 않고 오직 하나의 클래스로 부터만 상속 받을수 있다.
- 메소드 오버라이딩
:상속받은 메소드의 구현내용이 조금 다를경우 상속 받은 메소드를 무시하고
다시 정의할 수 있다.
▲ 규칙: 메소드 이름, 리턴타입, 인자가 같아야 한다.
▲ 오버라이드 하는 이유 : 이름이 다른 메소드를 새로 선언하지 않고 상속 받은 메소드
이름과 같이 다시 선언 하는 이유는 전체적인 기능은 같지만 구현내용이 조금 다른 경우
사용자의 편의성을 높이기 위해 같은 이름으로 선언한다.
- super : SuperClass를 지시하는 지시자로 SuperClass의 생성자를 호출하거나
오버라이드에 의해 무시된 메소드를 호출 할 때 사용된다.
▲ Super Class 생성자 호출
- Sub class의 생성자의 첫번째 라인에서만 호출할수 있다.
super([argument-list]);
- 만약 SuperClass에서 기본생성자가 없다면 상속 받는 subClass의 생성자에서는
인자가 있는 SuperClass의 생성자를 호출하지 않으면 컴파일 에러 발생
▲ 무시된 메소드 호출하기
super.methodName([argument-list]);
■ final : modifier종류로서 클래스, 메소드, 변수에 사용 가능
- 변수 : 상수가 됨=> 변수 선언시 값을 초기화 하고 그 이후 값 변경 불가
- 메소드 : override가 안됨
- 클래스 : 상속 불가
■ abstract : 추상화
-메소드 : 메소드를 구현하기에는 너무 추상적이어서 구현할 수 없을 경우
sub클래스에게 메소드를 구현하게 하는 기능
=> 강제 overried 기능
=> 클래스에 abstract메소드가 있으면 클래스도 abstract으로 선언해야한다.
-클래스 : 클래스 내용이 너무 추상적이어서 객체를 생성해서 사용할수 없어
객체 생성하지 못하게 한다.
■ static : 정적화
=> JVM은 동적으로 클래스를 로딩하고 동적으로 객체를 생성해서 바인딩한다.
그러나 static으로 선언하면 클래스 로딩시 메모리에 로딩되어 객체 생성 없이
사용할 수 있다.
- 멤버변수 : 객체들의 공유 변수
- method : 객체 생성없이 메소드 호출
- 클래스 : 기본 top클래스에서는 선언할 수 없고 nested클래스에서는 선언 할 수 있다.
- 객체 생성 없이 사용할 때
ClassName.method([argument-list])
ClassName.variableName
■ Polymorphism(다형성)
: 상속관계에서 Super 타입의 변수가 sub클래스의 객체를 참조 한다.
Ex)
Employee e1 = new Employee();
e1 = new Engineer();
e1 = new Manager();
Engineer en1 = new Employee(); =>(x)
Engineer en2 = new Manager(); =>(x)
Engineer en3 = new Engineer();
e1 = en3; =>(o) => upcasting
반응형
'프로그래밍 > Java' 카테고리의 다른 글
deprecated API (0) | 2009.01.29 |
---|---|
오버로딩, 캡슐화,bean (0) | 2009.01.21 |
생성자와 this (0) | 2009.01.21 |
object와 클래스 (0) | 2009.01.21 |
자바의 연산자와 배열 (0) | 2009.01.21 |