#1 오버로딩(Overloading)
: 클래스 내에 동일한 이름으로 정의된 많은 함수이다.
#2 생성자(Constructor)
: 생성자는 리턴 자료형이 없다.public DirectCons(String n, String a, int g) { // 매개변수 있는 생성자
#3 상속(Inheritance)
: 상위 클래스(Parent Class) 변수와 함수들를 그대로 하위 클래스(Child Class)가 가진다.: 생성자는 상속되지 않는다.
public class GrandFather {
f.sayGrandNumber();
f.sayFatherNumber();
}
C:\javasrc\>java InheritanceMain
I am a GrandFather <- Father가 상속한 GrandFather 클래스 생성자에서 출력
I am a Father <- Father 클래스 생성자에서 출력
0 1 2 3 4 5 6 7 8 9 <- sayGrandNumber() 메서드 호출
10 11 12 13 14 15 16 17 18 19 <-sayFatherNumber() 메서드 호출
: 상속 멤버 중 public 접근제어자들에 대해서는 모두 자기껏처럼 상속된다. (private은 자식 클래스도 접근할 수 없다.)
· 상속 멤버 중 protected 는 public으로 상속된다.
(protected: 자신 클래스에서는 private 권한을, 상속자에게는 public 권한을 준다)
: 다중 상속은 허용하지 않는다. (interface를 이용)
· 다양한 java의 라이브러리들을 가지고 그대로 가져다 쓰는 것이 아닌, 상속을 통해 세련되게 활용한다.
라이브러리 사용한 창만들기 public static void main(String[] args){
Frame f = new Frame();
f.setSize(200,200); f.setVisible(true);
}
} |
상속을 통한 창 만들기 import java.awt.*; class HelloFrame extends Frame{} public class HelloFrameMain{ public static void main(String[] args){
HelloFrame h = new HelloFrame();
h.setSize(200,200); h.show(); }
} |
#4 Overriding (오버라이딩)
: 상속 개념의 오버라이딩, 상위 클래스(Parent Class)의 메서드를 하위클래스(Child Class)가 다시 구현하는 것, 재사용하는 것이다.
class FaFa {
class Baby extends FaFa {
public class OverrideTest {
Baby b = new Baby();
b.sayHello(); //Baby의 sayHello() 호출
//Baby가 FaFa를 상속해서, 기존 FaFa의 sayHello는 무시한다.
FaFa fb = new Baby();
fb.sayHello(); //Baby의 sayHello() 호출
// 여기서는, 하위클래스에 대한 메모리 참조값을 상위클래스의 참조변수에 할당된 것이다.
// 업캐스팅(Upcastring)이 된 것이다. (C++에서는 가상 메서드(Virtual Method)라 한다.)
// C++에서는 virtual 키워드 사용하지만, 자바에서는 자동으로 virtual이 붙은 것이다.
}
#4 this
: 클래스 내에서 자기자신을 직접 참조하는 "가상참조변수": 사용방법
this.변수
this.메소드
this() <-자기자신 클래스의 기본 생성자(Constructor) 호출할 때
#5 super
: 상위 클래스를 참조하는 "가상참조변수": 상위 클래스(Parent Class)를 상속한 하위 클래스(Child Class)가 상위 메소드를 사용하려할때 사용
super.변수
super() <-상위 클래스의 기본 생성자(Constructor) 호출할 때