>  기사  >  Java  >  Java 상속(하위 클래스가 상위 클래스의 생성자를 상속하는지 여부)

Java 상속(하위 클래스가 상위 클래스의 생성자를 상속하는지 여부)

PHP中文网
PHP中文网원래의
2017-06-22 10:27:451739검색

Java 상속에서 하위 클래스는 상위 클래스의 생성자를 상속합니까?

Java 상속에서 하위 클래스는 상위 클래스의 생성자를 상속하지 않지만 (암시적 또는 명시적으로) call해야 합니다.

다음 예를 보십시오:

public class TestExtends {
    public static void main(String[] args) {
        SonClass s = new SonClass(66);
    }
}

class FooClass{
    public FooClass() {
        System.out.println(100);
    }
    public FooClass(int count) {
        System.out.println(count);
    }
}

class SonClass extends FooClass{
    public SonClass() {
    }
    public SonClass(int c) {
        System.out.println(1234);
    }

}

실행 결과:

100
1234

다음으로, 그러한 결과가 생성되는 이유를 분석하십시오:
프로그램은 SonClass s = new SonClass(66) 행을 실행하고 있습니다. ; SonClass s = new SonClass(66);这行时,调用

public SonClass(int c) {
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}

因此子类在执行上面的构造方法时,等价于执行了下面的代码:

public SonClass(int c) {
    super(); // 必须在第一行调用,否则不能编译
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}

所以结果为:
100 1234

接下来介绍另外一种情况(显式调用),如果子类构造函数是这样写的:

public SonClass(int c) {
    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了
    System.out.println(1234);
}

执行结构是:
2 1234

总结:

  • 构造函数是不能继承的,只是用来在子类调用,(如果父类没有无参构造函数,创建子类时,必须在子类构造函数代码体的第一行显式调用父类的有参数构造函数,否则不能编译);

  • 如果父类没有有参构造函数,那么在创建子类时可以不显式调用父类构造函数,系统会默认调用父类的无参构造函数super()rrreee

    를 호출하면 하위 클래스가 위 생성자 메서드를 실행할 때 다음 코드를 실행하는 것과 동일합니다.
  • rrreee
  • 따라서 결과는 다음과 같습니다.

    100 1234

  • 다음으로, 또 다른 이 경우(명시적 호출)를 소개합니다. 하위 클래스 생성자가 다음과 같이 작성되면:
rrreee
실행 구조는:

2 1234

요약:

h3>
    • 생성자는 상속될 수 없으며 하위 클래스를 호출하는 데만 사용됩니다(상위 클래스에 매개변수 없는 생성자가 없으면 하위 클래스를 생성할 때 반드시 하위 클래스 생성자 코드 본문에서 상위 클래스의 첫 번째 줄은 상위 클래스의 매개변수화된 생성자를 명시적으로 호출합니다. 그렇지 않으면 컴파일할 수 없습니다.

    • 부모 클래스에 매개변수화된 생성자가 없으면 필요하지 않습니다. 하위 클래스를 생성할 때 부모 클래스 생성자를 명시적으로 호출합니다. 시스템 부모 클래스의 매개변수 없는 생성자 super()가 기본적으로 호출됩니다.

    • 🎜부모 클래스에 매개변수 없는 생성자가 없는 경우 시스템은 매개변수 없는 기본 생성자를 조정할 수 없으므로 컴파일 호출이 통과되지 않습니다.🎜🎜🎜🎜🎜🎜추가 설명🎜:🎜🎜🎜🎜Java에서는 매개변수화된 생성자를 생성한 후 시스템이 더 이상 작동하지 않습니다. 기본 매개변수 없는 생성자가 있습니다🎜🎜🎜🎜부모 클래스에 생성자가 없으면 시스템은 기본적으로 매개변수 없는 생성자를 갖게 됩니다🎜🎜🎜

    위 내용은 Java 상속(하위 클래스가 상위 클래스의 생성자를 상속하는지 여부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.