JavaSE 제1 7 강:계승 분석

public class ConstructorOverload
{
	public ConstructorOverload()
	{
		System.out.println("test");
	}

	public ConstructorOverload(int i)
	{
		System.out.println(++i);
	}

	public static void main(String[] args)
	{
		ConstructorOverload col = new ConstructorOverload();


	}
}

실행 결과:
D:\src\Lesson 1>java ConstructorOverload test
이전 프로그램 수정:
출력 결과:
D:\src\Lesson 1>java ConstructorOverload 4 test
[원인]그 중 this(3);문장 은 현재 의 이 클래스 에서 정형 파 라미 터 를 받 아들 이 는 구조 방법 을 호출 해 야 한 다 는 것 을 나타 낸다.즉,방법 Constructor Overload(int i);그래서 출력 4.
수정 프로그램 은 상기 세 번 째 줄 코드 세그먼트 를 다음 코드 세그먼트 로 바 꿉 니 다.
집행 결과:
D:\src\Lesson 1>javac Constructor Overload.java Constructor Overload.java:7:오류:this 호출 은 구조 기 에서 첫 번 째 문장 이 어야 합 니 다.                this(3);                     ^ 오류
[설명]:this()는 구조 방법의 첫 번 째 문구 로 해 야 합 니 다.다시 말 하면 this()이전에 실행 가능 한 코드 가 있어 서 는 안 됩 니 다.
앞에서 말 한 예 를 다음 과 같이 수정 합 니 다.
public class ConstructorOverload
{
	public ConstructorOverload()
	{
		this(3);
		System.out.println("test");
	}

	public ConstructorOverload(int i)
	{
		System.out.println(++i);
	}

	public static void main(String[] args)
	{
		ConstructorOverload col = new ConstructorOverload();
	}
}

실행 결과:
D:\src\Lesson 1>java OverloadTest 3 3 6
【설명】구문 System.out.println(add(1,2);무 거 운 짐 을 싣 는 방법 사이 에는 서로 호출 할 수 있다 는 것 을 알 수 있다.
1.구조 방법 과부하:매개 변수 만 보면 됩 니 다.하나의 구조 방법 에서 다른 구조 방법 을 호출 하려 면 this()방식 으로 호출 할 수 있 습 니 다.this()괄호 에 있 는 매개 변 수 는 목표 구조 방법의 인 자 를 표시 합 니 다.this()는 구조 방법의 첫 번 째 문장 으로 해 야 합 니 다.다시 말 하면 this()이전에 실행 가능 한 코드 가 있어 서 는 안 됩 니 다.
2.상속(Inheritence):자바 는 단독 상속 으로 하나의 클래스 는 다른 클래스 에서 만 계승 할 수 있 음 을 의미 합 니 다(계승 되 는 클래스 는 부모 클래스[기본 클래스,base class],계승 하 는 클래스 는 하위 클래스 라 고 함).자바 의 계승 은 extends 키 워드 를 사용 합 니 다.
	public ConstructorOverload()
	{
	//	this(3);
		System.out.println("test");
		this(3);
	}

실행 결과:D:\src>java Child parent child[설명]:main 방법 에서 실행 문 Child child=new Child();앞에서 배 운 new 키워드 의 실행 과정 에 따라 하위 클래스 의 구조 방법 을 실행 하기 전에 부모 클래스 의 매개 변수 가 없 는 구조 방법 을 먼저 실행 합 니 다.아버지 없 이 아들 이 어디 있어!
수정 프로그램 은 다음 과 같 습 니 다.
public class OverloadTest
{
	public int add(int a ,int b)
	{
		return a + b;
	}

	public int add(int a, int b, int c)
	{
		System.out.println(add(1,2));
		return a + b + c;
	}

	public static void main(String[] args)
	{
		OverloadTest test = new OverloadTest();

		int result = test.add(1, 2);
		int result2 = test.add(1, 2, 3);

		System.out.println(result);
		System.out.println(result2);
	}
}

실행 결과:D:\src>javac Child.java Child.java:4:오류:클래스 Parent 의 구조 기 Parent 를 주어진 형식 에 적용 할 수 없습니다.        {         ^   필요:int  찾기:인자 없 음  원인:실제 매개 변수 목록 과 형식 매개 변수 목록 길이 가 다른 1 개의 오류
계속 수정 프로그램 은 다음 과 같 습 니 다.
public class Child extends Parent
{
	public Child()
	{
		System.out.println("child");
	}

	public static void main(String[] args)
	{
		Child child = new Child();
	}
}

class Parent
{
	public Parent()
	{
		System.out.println("parent");
	}
}

실행 결과:
D:\src>java Child no args parent child
지난번 코드 를 계속 수정 하면 지난번 에 수정 할 수 있 습 니 다.슈퍼()를 사용 할 수 있 습 니 다.키워드.
집행 결과:
D:\src>java Child parent child
【설명】:이때 자바 는 규정 에 따라 부모 클래스 의 매개 변수 가 없 는 구조 함 수 를 실행 하지 않 고 슈퍼 키 워드 를 사용 하여 부모 클래스 의 매개 변 수 를 사용자 정의 로 호출 하 는 구조 함 수 를 사용 합 니 다.
3.하위 클래스 대상 을 생 성 할 때 자바 는 기본적으로 부모 클래스 의 매개 변수 가 없 는 구조 방법 을 호출 한 다음 에 이 구조 방법 을 실행 하여 부모 클래스 의 대상 을 생 성 합 니 다.다음은 하위 클래스 의 구조 방법 을 호출 하여 하위 클래스 의 대상 을 생 성 합 니 다.[하위 클래스 의 대상 을 만 들 려 면 먼저 부모 클래스 의 대상 을 만들어 야 하 며,부모 클래스 대상 이 없 으 면 하위 클래스 대상 이 없다.예 를 들 어 아버지 가 없 으 면 아이 가 없다.
4.슈퍼 키워드:슈퍼 는 부모 대상 에 대한 인용 을 나타 낸다.this 와 키워드 의 차이 에 주의 하 세 요.
5.하위 클래스 가 슈퍼()명시 적 으로 부모 류 의 특정한 구조 방법 을 호출 하면 실행 할 때 슈퍼()와 대응 하 는 구조 방법 을 찾 고 부모 류 의 매개 변수 가 없 는 구조 방법 을 찾 지 않 는 다.this 와 마찬가지 로 슈퍼 도 구조 방법의 첫 번 째 실행 문 으로 해 야 하 며 앞 에 다른 실행 문 이 있어 서 는 안 된다.
이상 코드 세그먼트 설명 문제 수정
집행 결과:
D:\src>javac Child.java Child.java:4:오류:클래스 Parent 의 구조 기 Parent 를 주어진 형식 에 적용 할 수 없습니다.        {         ^   필요:int  찾기:인자 없 음  원인:실제 매개 변수 목록 과 형식 매개 변수 목록 의 길이 가 다 릅 니 다 Child.java:7:오류:슈퍼 호출 은 구조 기의 첫 번 째 문장 이 어야 합 니 다                super(7);                      ^ 두 가지 오류
프로그램 학습:
public class Child extends Parent
{
	public Child()
	{
		System.out.println("child");
	}

	public static void main(String[] args)
	{
		Child child = new Child();
	}
}

class Parent
{
	public Parent(int i)
	{
		System.out.println("parent");
	}
}

실행 결과:
D:\src>java InheritenceTest fruit
【설명】:부모 클래스 의 name 속성 을 계승 하 였 습 니 다.
수정 절 차 는 다음 과 같다.
public class Child extends Parent
{
    public Child()
    {
        System.out.println("child");
    }

    public static void main(String[] args)
    {
        Child child = new Child();
    }
}

class Parent
{
    public Parent(int i)
    {
        System.out.println("parent");
    }

    public Parent()
    {
        System.out.println("no args parent");
    }
}

실행 결과:
D:\src>java InheritenceTest apple
【설명】:부모 클래스 의 속성 name 을 수정 할 수 있 습 니 다.
수정 절 차 는 다음 과 같다.
public class Child extends Parent
{
	public Child()
	{
		super(7);
		System.out.println("child");
	}

	public static void main(String[] args)
	{
		Child child = new Child();
	}
}

class Parent
{
	public Parent(int i)
	{
		System.out.println("parent");
	}

	/*
	public Parent()
	{
		System.out.println("no args parent");
	}
	*/
}

실행 결과:
D:\src>java InheritenceTest apple
【설명】:부모 류 에 없 는 속성,같은 것 은 스스로 속성 을 추가 할 수 있 습 니 다.
6.상속 에 관 한 3 가지:a)부 류 는 있 고,자 류 는 b)부 류 는 없 으 며,자 류 는 c)부 류 는 있 고,자 류 는 바 꿀 수 있다.
7.계승 에 관 한 주의사항 a)구조 방법 은 b)방법 과 속성 을 계승 할 수 없다.c)서브 클래스 의 구조 방법 은 부모 클래스 의 매개 변수 가 없 는 구조 방법 d)부모 클래스 에 매개 변수 가 없 는 구조 방법 이 없 을 때 서브 클래스 는 슈퍼 를 사용 하여 부모 클래스 의 구조 방법 을 명시 적 으로 호출 해 야 한다.슈퍼 는 부모 클래스 에 대한 인용 e)슈퍼 키 워드 는 구조 방법의 첫 번 째 줄 문 구 를 말 합 니 다.

좋은 웹페이지 즐겨찾기