산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 슈퍼

자바 슈퍼

이 튜토리얼에서는 예제를 통해 Java의 super 키워드에 대해 배웁니다.

super Java의 키워드는 서브클래스에서 슈퍼클래스 멤버(속성, 생성자 및 메소드)에 액세스하는 데 사용됩니다.

super에 대해 알아보기 전에 키워드, Java 상속에 대해 알아야 합니다.

<시간>

슈퍼 키워드 사용

  1. 서브클래스에서 재정의된 슈퍼클래스의 메서드를 호출합니다.
  2. 수퍼클래스와 서브클래스에 같은 이름의 속성이 있는 경우 슈퍼클래스의 속성(필드)에 액세스합니다.
  3. 상위 클래스 no-arg(기본값) 또는 하위 클래스 생성자에서 매개변수화된 생성자를 명시적으로 호출합니다.

각각의 용도를 이해합시다.

<시간>

1. 슈퍼클래스의 재정의된 메서드에 액세스

동일한 이름을 가진 메서드가 슈퍼클래스와 서브클래스 모두에 정의되어 있으면 서브클래스의 메서드가 슈퍼클래스의 메서드를 재정의합니다. 이를 메서드 재정의라고 합니다.

예시 1:메소드 재정의

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){
    display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

출력

I am a dog

이 예에서는 개체를 dog1 의 클래스에서 printMessage() 메서드를 호출할 수 있습니다. 그런 다음 display()을 실행합니다. 성명서.

display() 이후 두 클래스 모두에서 정의되며 하위 클래스 Dog의 메서드입니다. 슈퍼클래스 Animal의 메서드를 재정의합니다. . 따라서 display() 하위 클래스가 호출됩니다.

슈퍼클래스의 재정의된 메서드를 호출해야 하는 경우 어떻게 됩니까?

super.display()를 사용합니다. 재정의된 메서드 display()인 경우 슈퍼클래스 동물 호출해야 합니다.

예시 2:수퍼클래스 메소드를 호출하기 위한 수퍼

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){

    // this calls overriding method
    display();

    // this calls overridden method
    super.display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

출력

I am a dog
I am an animal

위의 프로그램이 작동하는 방식은 다음과 같습니다.

<시간>

2. 슈퍼클래스의 액세스 속성

슈퍼클래스와 서브클래스는 같은 이름의 속성을 가질 수 있습니다. super를 사용합니다. 슈퍼클래스의 속성에 접근하기 위한 키워드.

예시 3:슈퍼클래스 속성에 접근

class Animal {
  protected String type="animal";
}

class Dog extends Animal {
  public String type="mammal";

  public void printType() {
    System.out.println("I am a " + type);
    System.out.println("I am an " + super.type);
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printType();
  }
}

출력 :

I am a mammal
I am an animal

이 예에서는 동일한 인스턴스 필드 type을 정의했습니다. 슈퍼클래스 Animal 모두에서 및 하위 클래스 .

그런 다음 dog1 개체를 만들었습니다. 수업. 그런 다음 printType() 이 개체를 사용하여 메서드를 호출합니다.

printType() 내부 기능,

따라서 System.out.println("I am a " + type); 인쇄 나는 포유류입니다 . 그리고 System.out.println("I am an " + super.type); 나는 동물입니다 를 인쇄합니다. .

<시간>

3. super()를 사용하여 수퍼클래스 생성자에 액세스

알다시피 클래스의 개체가 생성되면 기본 생성자가 자동으로 호출됩니다.

하위 클래스 생성자에서 상위 클래스 생성자를 명시적으로 호출하려면 super()을 사용합니다. . super의 특별한 형태입니다. 키워드.

super() 서브클래스 생성자 내에서만 사용할 수 있으며 첫 번째 명령문이어야 합니다.

예제 4:super() 사용

class Animal {

  // default or no-arg constructor of class Animal
  Animal() {
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // default or no-arg constructor of class Dog
  Dog() {

    // calling default constructor of the superclass
    super();

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

출력

I am an animal
I am a dog

여기서 dog1 개체가 의 클래스가 생성되면 해당 클래스의 기본 생성자 또는 인수가 없는 생성자를 자동으로 호출합니다.

하위 클래스 생성자 내에서 super() 명령문은 슈퍼클래스의 생성자를 호출하고 그 안에 있는 명령문을 실행합니다. 따라서 우리는 I am animal 출력을 얻습니다. .

그런 다음 프로그램의 흐름은 하위 클래스 생성자로 다시 돌아가 나머지 명령문을 실행합니다. 따라서 나는 개입니다 인쇄됩니다.

그러나 super()를 사용하면 의무 사항이 아닙니다. super() 하위 클래스 생성자에서 사용되지 않는 경우 컴파일러는 암시적으로 상위 클래스의 기본 생성자를 호출합니다.

그러면 컴파일러가 자동으로 super()를 호출하는 경우 중복 코드를 사용하는 이유는 무엇입니까?

매개변수화된 생성자(인수를 받는 생성자) 상위 클래스의 하위 클래스 생성자에서 호출해야 합니다.

매개변수화된 super() 항상 하위 클래스 생성자 본문의 첫 번째 명령문이어야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.

예제 5:super()를 사용하여 매개변수화된 생성자 호출

class Animal {

  // default or no-arg constructor
  Animal() {
    System.out.println("I am an animal");
  }

  // parameterized constructor
  Animal(String type) {
    System.out.println("Type: "+type);
  }
}

class Dog extends Animal {

  // default constructor
  Dog() {

    // calling parameterized constructor of the superclass
    super("Animal");

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

출력

Type: Animal
I am a dog

컴파일러는 인수가 없는 생성자를 자동으로 호출할 수 있습니다. 그러나 매개변수화된 생성자를 호출할 수 없습니다.

매개변수화된 생성자를 호출해야 하는 경우 하위 클래스 생성자에서 명시적으로 정의해야 합니다.

위의 예에서 우리는 명시적으로 매개변수화된 생성자를 super("Animal")라고 불렀습니다. . 이 경우 컴파일러는 슈퍼클래스의 기본 생성자를 호출하지 않습니다.


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 for-each 루프
  4. 자바 문자열
  5. 자바 인터페이스
  6. 자바 익명 클래스
  7. 자바 리소스 사용
  8. 자바 주석
  9. 자바 어설션
  10. 자바 벡터