English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 흐름 제어

Java 배열

Java 상대적 객체-oriented(I)

Java 상대적 객체-oriented(II)

Java 상대적 객체-oriented(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map 셋

Java Set 셋

Java 입력/출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 추상 클래스와 추상 메서드

이 튜토리얼에서는 Java의 추상적을 배웁니다. Java 추상 클래스와 메서드를 배우고, 그들을 프로그램에서 사용하는 방법을 배웁니다.

Java 추상 클래스

추상 클래스는 인스턴스화할 수 없는 클래스입니다(추상 클래스의 객체를 생성할 수 없습니다). Java에서는 abstract 키워드를 사용하여 추상 클래스를 선언합니다.

abstract class Animal {
   //속성과 메서드
}

추상 클래스의 객체를 생성하려고 시도하면 컴파일 오류가 발생합니다. 예를 들어,

Animal a1 = new Animal()

컴파일 오류가 발생합니다:

 동물은 추상적입니다; 인스턴스화할 수 없습니다

추상 클래스를 인스턴스화할 수 없지만, 그에서 서브클래스를 생성할 수 있습니다. 추상 클래스의 멤버에 접근하기 위해 서브클래스를 생성할 수 있습니다.

그를 자세히 이해하기 전에, 추상 메서드를 이해해야 합니다.

Java 추상 메서드

추상 메서드를 생성하기 위해 같은 키워드abstract를 사용합니다. 구현 없이 추상 메서드를 선언했습니다. 예를 들어

abstract void makeSound();

여기서 makeSound()은 추상 메서드입니다.

중요한 것은, 추상 메서드를 포함할 수 있는 클래스는 단 하나의 추상 클래스일 수 있습니다. 추상 메서드를 비추상 클래스에 포함하면 오류가 발생합니다.

추상 클래스는 추상 메서드와 비추상 메서드를 포함할 수 있습니다. 이는 예제입니다.

abstract class Animal {
   public void displayInfo() {
      System.out.println("I am an animal.");
   }
   abstract void makeSound();
}

위 예제에서는 추상 클래스Animal을 생성했습니다. 이 클래스는 추상 메서드makeSound()과 비추상 메서드displayInfo()를 포함하고 있습니다.

추상 클래스의 상속

추상 클래스는 인스턴스화할 수 없습니다. 추상 클래스의 멤버에 접근하기 위해 그를 상속해야 합니다. 예를 들어

예제1:추상 클래스의 상속

abstract class Animal {
 public void displayInfo() {
   System.out.println("I am an animal.");
 }
}
class Dog extends Animal {
}
class Main {
 public static void main(String[] args) {
   Dog d1 = new Dog();
   d1.displayInfo();
 }
}

출력

I am an animal.

위 예제에서는 추상 클래스Animal을 생성했습니다. Animal 클래스의 객체를 생성할 수 없습니다. displayInfo() 메서드에 접근하기 위해 Animal의 서브클래스Dog를 상속했습니다.

그런 다음, 우리는 Dog의 d1객체가 displayInfo() 메서드를 호출합니다.

추상 메서드를 재정의

Java에서는 서브클래스에서 상위 클래스의 추상 메서드를 재정의해야 합니다. 이는 서브클래스가 상위 클래스의 추상 메서드를 상속했기 때문입니다.

 우리의 서브클래스가 추상 메서드를 포함하고 있기 때문에 그들을 재정의해야 합니다.

주의:자식 클래스가 추상 클래스로 선언되어도 추상 메서드를 필수로 재정의할 필요가 없습니다.

예제2:추상 메서드를 오버라이드

abstract class Animal {
   abstract void makeSound();
   public void eat() {
      System.out.println("I can eat.");
   }
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      d1.eat();
   }
}

출력

Bark bark.
I can eat.

위 예제에서는 추상 클래스Animal을 생성했습니다. 이 클래스는 추상 메서드makeSound()과 비추상 메서드eat()를 포함하고 있습니다.

우리는超类Animal에서 Dog라는 서브클래스를 상속했습니다. 여기서 서브클래스Dog는 추상 메서드displayInfo()를 오버라이드했습니다.

 그런 다음 Dog 객체 d를 생성했습니다.1를 사용하여 이 객체를 호출했습니다.1.displayInfo()와 d1.eat() 메서드.

추상 클래스의 생성자 접근

비 추상 클래스와 유사하게, 우리는 super 키워드를 사용하여 서브클래스에서 추상 클래스의 생성자에 접근합니다. 예를 들어,

abstract class Animal {
   Animal() {
      ...
   }
}
class Dog extends Animal {
   Dog() {
      super();
      ...
   }
}

여기서는 Dog의 생성자에서 super()를 사용하여 Animal 클래스의 생성자에 접근합니다.

주의할 것은 super가 항상 서브클래스 생성자의 첫 번째 문장이어야 한다는 것입니다. 접근Java 슈퍼 키워드자세한 정보를 더 알고 싶다면.

왜 Java 추상을 사용합니까?

추상은面向对象编程의 중요한 개념입니다. 추상은 필요한 정보만을 표시하고, 모든 불필요한 세부 사항을 숨겨줍니다. 이로 인해 우리는 더 간단하고 고급스러운 아이디어를 사용하여 세부 사항을 생략하거나 숨기며 복잡성을 관리할 수 있습니다.

추상의 실제 예제는 모터사이클 제동기입니다. 우리는 제동기의 작용을 알고 있습니다. 제동기를 누르면 모터사이클이 멈춥니다. 그러나 제동기의 작동은 우리에게는 숨겨져 있습니다.

추상 제동기 작동 원리의 주요 장점은, 이제 제조업체가 다른 모터사이클에 대해 다른 제동기를 사용할 수 있지만, 제동기의 작용은 동일하다는 것입니다.

Java 추상의 개념을 더 잘 이해하기 위해 예제를 들어보겠습니다.

예제3:Java 추상

abstract class Animal {
   abstract void makeSound();
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("바웅바웅.");
   }
}
class Cat extends Animal {
   public void makeSound() {
      System.out.println("미음 ");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      Cat c1 = new Cat();
      c1.makeSound();
   }
}

출력

바웅바웅
미음

위의 예제에서는 Animal 슈퍼클래스를 생성했습니다. 슈퍼클래스 Animal은 추상 메서드 makeSound()를 가집니다.

makeSound() 메서드는 Animal 내부에서 구현할 수 없습니다. 이유는 각 동물이 다른 소리를 내기 때문입니다. 따라서 Animal의 모든 서브클래스는 다른 makeSound() 구현 메서드를 가집니다.

Animal에서 makeSound()를 모든 Animal 서브 클래스에 대해 올바르게 구현할 수 없으므로, Animal에서 makeSound()의 구현은 숨겨집니다.

 위의 예제에서 Dog은 자신의 makeSound() 구현을 구현했고 Cat은 자신의 makeSound() 구현을 구현했습니다.

기억해야 할 포인트

  • abstract 키워드를 사용하여 추상 클래스와 메서드를 생성합니다.

  • 추상 메서드에는 어떤 구현도 없습니다(메서드 바디).

  • 추상 메서드를 포함하는 클래스는 추상 클래스여야 합니다.

  • 추상 클래스의 객체를 생성할 수 없습니다.

  • 추상 클래스의 기능을 구현하기 위해 추상 클래스를 상속받은 서브 클래스를 생성하고 그 서브 클래스의 객체를 생성합니다.

  • 서브 클래스는 추상 클래스의 모든 추상 메서드를 재정의해야 합니다. 그러나 서브 클래스가 추상으로 선언되면 추상 메서드를 재정의할 필요가 없습니다.

  • 추상 클래스의 참조를 사용하여 추상 클래스의静态 속성과 메서드에 접근할 수 있습니다. 예를 들어,

    Animal.staticMethod();

Java 인터페이스

Java에서 인터페이스는 추상 클래스와 유사하지만, 인터페이스에는 비 추상 메서드가 없습니다. 다음 강의에서 인터페이스에 대해 더 알아보겠습니다.