Overloading
Constructor
Inheritance
Overriding
this
super


#1 오버로딩(Overloading) 
: 클래스 내에 동일한 이름으로 정의된 많은 함수이다.
public class MultiPlus {
public int plus(int a, int b) {
return a + b;
}
public float plus(float a, float b) {
return a + b;
}
public int plus(int a, int b, int c) {
return a + b + c;
}
}


#2 생성자(Constructor)

: 생성자는 리턴 자료형이 없다.
public class DirectCons {
public DirectCons(){                                // 매개변수 없는 생성자 

}                                
public DirectCons(String n, String a, int g) {  // 매개변수 있는 생성자 

}  
}


#3 상속(Inheritance)

: 상위 클래스(Parent Class) 변수와 함수들를 그대로 하위 클래스(Child Class)가 가진다.
생성자는 상속되지 않는다.
public class GrandFather {
public GrandFather() {
System.out.println("I am a GrandFather");
}
public void sayGrandNumber() {
System.out.println("0 1 2 3 4 5 6 7 8 9");
}
}
pubilc class Father {
public Father() {
System.out.println("I am a Father");
}
public void sayFaterNumber() {
System.out.println("10 11 12 13 14 15 16 17 18 19");
}
}
public class InheritanceMain {
public static void main(String[] args) {
Father f = new Father();
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의 라이브러리들을 가지고 그대로 가져다 쓰는 것이 아닌, 상속을 통해 세련되게 활용한다.

라이브러리 사용한 창만들기

import java.awt.*;
public class LibFrameMain{

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();
}
}
※ 참고, awt 관련 블로그(http://breadshuttle.tistory.com/entry/JAVA-ATW기본-윈도우-창을-띄워보자)



#4 Overriding (오버라이딩)
: 상속 개념의 오버라이딩, 상위 클래스(Parent Class)의 메서드를 하위클래스(Child Class)가 다시 구현하는 것, 재사용하는 것이다.
class FaFa {

public void sayHello() { System.out.println("FaFa의 sayHello()"); }
}
class Baby extends FaFa {
public void sayHello() { System.out.println("Baby의 sayHello()"); }
}
public class OverrideTest {
public static void main(String[] args) {
FaFa f = new FaFa();
f.sayHello();             //FaFa의 sayHello() 호출
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.메소드
super()     <-상위 클래스의 기본 생성자(Constructor) 호출할 때