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)슈퍼 키 워드 는 구조 방법의 첫 번 째 줄 문 구 를 말 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.