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

자바 - 재정의

이전 장에서 우리는 슈퍼클래스와 서브클래스에 대해 이야기했습니다. 클래스가 상위 클래스에서 메서드를 상속하는 경우 final로 표시되지 않는 한 메서드를 재정의할 기회가 있습니다.

재정의의 이점은 하위 클래스 유형에 고유한 동작을 정의할 수 있다는 것입니다. 즉, 하위 클래스가 요구 사항에 따라 상위 클래스 메서드를 구현할 수 있음을 의미합니다.

개체 지향적인 용어로 재정의는 기존 메서드의 기능을 재정의하는 것을 의미합니다.

예시

예를 살펴보겠습니다.

라이브 데모
class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
   }
}

이것은 다음 결과를 생성합니다 -

출력

Animals can move
Dogs can walk and run

위의 예에서 b Dog 클래스에서 move 메서드를 실행하는 Animal 유형입니다. 그 이유는 다음과 같습니다. 컴파일 시간에 참조 유형을 확인합니다. 그러나 런타임에서 JVM은 개체 유형을 파악하고 해당 특정 개체에 속한 메서드를 실행합니다.

따라서 위의 예에서는 Animal 클래스에 move 메서드가 있으므로 프로그램이 제대로 컴파일됩니다. 그런 다음 런타임에 해당 개체에 특정한 메서드를 실행합니다.

다음 예를 고려하십시오 -

예시

라이브 데모
class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
   public void bark() {
      System.out.println("Dogs can bark");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
      b.bark();
   }
}

이것은 다음 결과를 생성합니다 -

출력

TestDog.java:26: error: cannot find symbol
      b.bark();
       ^
  symbol:   method bark()
  location: variable b of type Animal
1 error

이 프로그램은 b의 참조 유형 Animal에 껍질이라는 이름의 메서드가 없기 때문에 컴파일 시간 오류가 발생합니다.

메서드 재정의 규칙

슈퍼 키워드 사용

재정의된 메소드의 수퍼클래스 버전을 호출할 때 super 키워드가 사용되었습니다.

예시

라이브 데모
class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      super.move();   // invokes the super class method
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal b = new Dog();   // Animal reference but Dog object
      b.move();   // runs the method in Dog class
   }
}

이것은 다음 결과를 생성합니다 -

출력

Animals can move
Dogs can walk and run

java

  1. 자바 연산자
  2. 자바 인터페이스
  3. Java의 String Length() 메서드:예제로 찾는 방법
  4. 하위 문자열 및 예제가 있는 Java 문자열 indexOf() 메서드
  5. 예제가 있는 Java 문자열 charAt() 메서드
  6. Java String compareTo() 메서드:예제와 함께 사용하는 방법
  7. Java 문자열 contains() 메소드 | 예제로 하위 문자열 확인
  8. 예제가 포함된 Java 문자열 endWith() 메서드
  9. Java 문자열 replace(), replaceAll() 및 replaceFirst() 메서드
  10. Java의 정적 변수:정적 블록 및 메서드란 [예시]