package ch06;
import ch05.sub.*;
public class Ch0608 //extends Car
{
// this() : 현재 클래스의 생성자함수를 호출할때 사용.
// super() : 상위클래스의 생성자함수를 호출할때 사용.
public Ch0608()
{
// TODO 자동 생성된 생성자 스텁
this("hello");
System.out.println("인자없는 생성자~");
}
public Ch0608(String s)
{
//this()는 생성자 오버로딩시 생성자에서
//오버로딩된 다른 생성자를 호출 할때 사용.
//지켜야할 규칙 : 반드시 생성자 의 첫줄에서 사용.
//this();
System.out.println(s);
}
public void run()
{
//1상황.
//this();
}
public static void main(String[] args)
{
//1상황.
//new Ch0608("Hello");
new Ch0608();
}
}
***** ColorCar.java ******
package ch06;
import ch05.sub.*;
public class ColorCar extends Car
{
/*
* 메서드 오버라이딩 : 오버로딩과 다르다
* 계승에서 상위클래스의 멤버함수의 이름,인자의 수까지
* 완벽히 똑같은 이름을 하위클래스에서 구현할 경우
* 상위클래스의 멤버함수는 은닉화되어 힘을 읽어버리며,
* 하위클래스의 멤버함수가 그 함수를 대신하게 된다.
* (상위클래스의 멤버함수의 재정의)
* */
public ColorCar()
{
// TODO 자동 생성된 생성자 스텁
//1.기존..
//super();
//0603수정
super("a","b"); //이미 오버로딩되어있으므로,
//결론 : 상위클래스의 생성자가 오버로딩되어 있어서
//하위클래스의 생성자에서 상위클래스의 생성자중 하나를 선택하여
//실행하고자 하는 경우에 super()는 사용된다.
}
//아래의 print는 상위클래스의 print와 이름은 같지만,
//인자의 수가 다르므로 멤버함수의 오버로딩에 해당.
public void print(String message)
{
System.out.println(message);
}
//상위클래스의 print메서드의 오버라이딩
public void print()
{
// TODO 자동 생성된 메소드 스텁
//super는 상위클래스를 가르키는 지시어이다.
//따라서 아래와 같이 super.print()를 지정하면,
//상위 클ㄹ래스의 print()가 호출된다.
//super는 보통 지금처럼 오버라이딩시
//하위에서 상위클래스의 오버라이딩된 원본 메서드를 호출할때 사용.
super.print();
System.out.println("Hello Color Car()");
}
public static void main(String[] args)
{
ColorCar colorCar = new ColorCar();
//colorCar.print("aa");
colorCar.print();
}
}