>  기사  >  Java  >  Java의 추상 클래스

Java의 추상 클래스

PHPz
PHPz원래의
2024-08-30 15:59:08854검색

다음 문서에서는 Java의 추상 클래스에 대한 개요를 제공합니다. 추상 클래스는 Java의 다른 일반 클래스와 같습니다. 추상 클래스와 일반 클래스의 중요한 차이점은 추상 클래스를 생성한다는 점입니다. 'ABSTRACT' 키워드를 사용해야 합니다. 클래스 구현의 분리입니다. 이는 하위 클래스의 매우 일반적인 기능을 정의하는 데 사용되었습니다. 이러한 유형의 클래스를 추상 클래스라고 합니다. 가장 중요한 점은 추상 클래스의 객체를 생성할 수 없다는 것입니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

추상 클래스에는 추상 메서드와 비추상 메서드가 포함될 수 있습니다. 그러나 서브클래스에서만 제공할 수 있는 추상 메서드의 본문은 포함할 수 없습니다. 서브클래스가 추상 메소드를 구현하지 않는 경우 명시적으로 이를 ABSTRACT로 만들어야 합니다. 즉, 클래스에 추상 메서드가 포함되어 있으면 자체적으로 ABSTRACT로 정의해야 합니다. 추상 클래스를 사용하여 여러 Java 클래스를 그룹화하고, 코드를 최적화하고, 코드를 더 읽기 쉽게 만들고, 중복성을 줄일 수 있습니다. 또한 향후 수업을 위한 템플릿도 제공됩니다.

Java의 추상 클래스 구문

추상 클래스의 구문은 다음과 같습니다.

Java의 추상 클래스

Java에서 추상 클래스는 어떻게 작동하나요?

  • 추상 클래스에는 추상 메서드와 비추상 메서드, 즉 몸체가 없는 추상 메서드가 있으며, 구현된 메서드를 가질 수 있습니다.
  • 추상 클래스는 다양한 클래스에 특정한 가장 일반적인 기능을 제공하는 데 사용됩니다. 서브클래스는 필요나 요구 사항에 따라 이러한 추상 메서드를 다르게 구현할 수 있습니다.
  • 'new' 연산자를 사용하여 추상 클래스의 객체를 생성할 수는 없지만 하위 클래스의 생성자에서만 호출할 수 있는 생성자를 정의할 수는 있습니다. 서브클래스 생성자는 슈퍼클래스 생성자에 액세스하여 해당 변수를 초기화할 수 있으며, 이는 추가 요구 사항에 따라 서브클래스에서 사용될 수 있습니다.

Java의 추상 클래스 예

다음 예는 다음과 같습니다.

Human.java

package com.cont.article;
public abstract class Human
{
public abstract void whatTheylike();
public void doTheysleep()
{
System.out.println("Yes every human require sleep.");
}
}

Human1.java

package com.cont.article;
public class Human1 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have icecream.");
}
}

Human2.java

package com.cont.article;
public class Human2 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have coffee.");
}
}

TestHuman.java

package com.cont.article;
public class TestHuman
{
public static void main(String[] args)
{
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
}
}

출력:

Java의 추상 클래스

위의 예에서 HUMAN은 인간의 공통적인 요구 사항, 좋아하는 것, 싫어하는 것을 정의하는 추상 클래스입니다. 좋아하는 것과 싫어하는 것이 서로 다른 다양한 유형의 인간이 있습니다. 따라서 모든 인간은 자신이 좋아하는 특정 구현을 제공할 수 있습니다. 이는 해당 사용자에게만 해당됩니다.

추상 클래스의 가장 큰 장점은 요구 사항에 따라 특정 메서드를 구현하고 중복을 줄이고 코드 가독성을 높이며 메서드 구현을 숨기고 부분 추상화를 제공한다는 것입니다.

추상 클래스를 언제 사용해야 하는지 이해하기 위한 예가 하나 더 있습니다.

  • 특정 구현을 갖춘 다양한 클래스와 공통 기능을 공유하려면 추상 클래스를 사용해야 합니다.
  • 추상 클래스에서 필드는 정적이거나 최종적이어서는 안 됩니다. 구체적, 비공개, 공개 및 보호 방법도 있을 수 있습니다.

동물 클래스가 하나 있다고 가정해 보겠습니다. 지구상에는 다양한 동물이 있으며, 그들은 모두 어떤 의미 또는 주요 의미에서 서로 다릅니다. 그럼에도 불구하고 모든 공통 기능을 모두 포함합니다.

이제 이 Animal 클래스는 모든 Animal에 대해 특정 메소드를 가질 수 없습니다. 따라서 Abstract 클래스의 개념을 이용하면 중복된 코드 없이 이 기능을 구현할 수 있습니다.

모든 동물은 소리, 습관 등이 다릅니다. 예를 들어 개, 고양이, 코끼리, 간식은 소리가 다릅니다. 따라서 이를 위해 상위 클래스에 다른 모든 하위 클래스 또는 하위 클래스가 특정 구현을 제공할 수 있는 일반 메서드를 가질 수 있습니다.

부모 클래스인 Animal에는 Sound()라는 일반적인 추상 메소드가 하나 있습니다. 따라서 모든 하위 클래스는 이 메서드를 재정의하고 특정 구현을 제공해야 합니다.

추상 클래스와 인터페이스

추상 클래스와 인터페이스의 차이점은 다음과 같습니다.

  • 추상 클래스와 인터페이스는 모두 Java에서 추상화를 달성하는 데 사용됩니다. 그러나 추상 클래스는 부분 추상화를 제공하는 반면 인터페이스는 100% 또는 완전한 추상화를 제공합니다.
  • 기본적으로 인터페이스의 변수는 최종 변수입니다. 그러나 추상 클래스에는 최종이 아닌 변수도 포함되어 있습니다. 마찬가지로 추상 클래스에는 정적, 비정적 변수가 있을 수도 있습니다. 그러나 인터페이스에는 최종 및 정적 변수만 포함됩니다.
  • 추상 클래스의 멤버 변수는 비공개, 공개, 보호가 될 수 있지만 인터페이스에서는 기본적으로 공개입니다.
  • 추상 클래스는 다른 Java 클래스를 확장하고 여러 인터페이스를 구현할 수 있지만 하나의 인터페이스는 다른 인터페이스만 확장할 수 있습니다. 마찬가지로 추상 클래스는 인터페이스 구현을 제공할 수 있지만 인터페이스는 그렇게 할 수 없습니다.
  • 인터페이스와 클래스를 구현하고 확장하기 위해 구현 및 확장 키워드를 사용합니다.
  • 메서드를 통해 추상 클래스의 비정적 및 비최종 변수를 수정하거나 액세스할 수 있습니다.

결론

부분 추상화를 제공하기 위해 추상 클래스가 사용됩니다. NEW 키워드를 사용하여 추상 클래스를 인스턴스화할 수 없습니다. Abstract 메서드에는 본문이 없으며 항상 세미콜론(;)으로 끝납니다. 추상 클래스에는 추상 및 비추상 메서드가 포함됩니다. 추상 슈퍼클래스의 서브클래스는 모든 추상 메서드를 구현해야 합니다. 제공하지 않으면 자신을 추상 클래스로 선언해야 합니다. 슈퍼클래스가 구체적이더라도 하위클래스는 추상적일 수 있습니다. 추상이 아닌 클래스에는 추상 메서드가 포함될 수 없습니다. 또한 추상 메소드는 비정적입니다. 따라서 추상 클래스에는 추상 메서드와 구체적 메서드도 있으므로 100% 추상화를 제공할 수 없습니다. 최종 사용자에게 복잡한 로직을 숨기고 서비스만 보여주는 과정입니다.

반면, 하위 클래스는 상위 클래스가 구체적이더라도 추상 클래스일 수 있으며 데이터 유형으로도 사용할 수 있습니다. 추상 클래스에는 정적 필드와 정적 메서드가 있을 수 있습니다. 클래스 참조와 함께 이러한 정적 멤버를 사용할 수 있습니다.

위 내용은 Java의 추상 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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