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();  
 }
}

Posted by 말없제이
,