English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
오늘은 자신이 Java의 추상 클래스와 인터페이스에 대한 이해를 말씀드리겠습니다. 참고 내용 포함:
1. 추상 클래스
1정의:
public abstract class 클래스 이름{}
Java 언어에서 모든 객체는 클래스로 설명됩니다. 하지만 모든 클래스가 객체를 설명하는 것은 아닙니다. 제 이해에 따르면, 추상 클래스는 동일한 유형의 물체의 공통 부분을 높은 수준으로 추출하는 것입니다. 이 공통 부분은 속성과 행위를 포함합니다. 예를 들어, 소, 양, 돼지의 공통 속성은 모두 털이 있고, 공통 행위는 모두 젖을 먹는 것입니다. 따라서 공통 부분을 추상된 젖목으로 추출할 수 있습니다. 이 젖목에는 속성 털과 행위 젖을 포함합니다. 소, 양, 돼지가 젖목을 상속하면, 젖을 먹는 기능을 가지게 됩니다. 그런 다음, 이 기능을 어떻게 구현할지는 자신이 구현해야 합니다.
2특징
(1Abstract 키워드로修饰된 클래스는 추상 클래스입니다;
(2추상 메서드는 반드시 public이거나 protected여야 하며, 그렇지 않으면 서브 클래스에서 상속할 수 없습니다. 기본적으로 public입니다;
(3추상 메서드는 구현을 할 수 없으며, 그렇지 않으면 컴파일 오류가 발생합니다;
(4추상 클래스는 자신의 멤버 변수와 멤버 메서드를 정의할 수 있습니다;
(5추상 클래스를 상속하는 서브 클래스는 추상 클래스의 모든 추상 메서드를 구현해야 하며, 그렇지 않으면 서브 클래스도 추상 클래스로 정의되어야 합니다;
(6추상 클래스는 인스턴스화할 수 없습니다.
3공식적으로 이 규정이 정확한지 검증합니다:
이는 word에서 편집한 검증 테이블입니다. 이를 이미지로 자르고 여기에 넣었습니다:
위의 검증 결과에 따르면, 이 이론은 모두 정확합니다.
2. 인터페이스
1정의:
public interface 인터페이스이름{}
인터페이스는 메서드를 제공하기 위해 사용됩니다. 제 이해에 따르면, 여러 클래스의 공통 행위를 높은 수준으로 추출하는 것입니다. 예를 들어, 모든 동물들은 공통 행위가 먹고 잠을 자는 것입니다. 따라서 이 두 행위를 추출하여 인터페이스에 포장할 수 있습니다. 어떤 동물이 이 행위를 수행하려면 인터페이스를 호출하고, 자신의 클래스에서 구체적인 구현을 완료하면 됩니다. 이 이해는 추상 클래스와 차이가 없는 것처럼 보이지만, 아래의 예제를 보면 다릅니다. 이 두 행위를 추상 클래스에 두고, 이 추상 클래스에는 또 다른 등반 행위가 있다면, 예를 들어, 파리라는 지느러미 동물이 이 클래스를 상속하면, 먹고 잠자고 등반하는 세 가지 메서드를 구현하게 되어, 먹고 잠자는 기능을 가지게 됩니다. 하지만, 날아다니는鸟类의 동물이 이 메서드를 상속하면, 먹고 잠자고 등반하는 기능을 가지게 됩니다. 그런데, 등반은 그들이 필요한 기능이 아닙니다. 이는 의미가 없어 보입니다. 하지만, 먹고 잠만 있는 인터페이스를 상속하면, 먹고 잠의 기본 기능을 가지게 됩니다. 등반과 날아다니는 것은 추상 클래스에 추출하여 필요에 따라 상속하고 구현하면 됩니다.
2특징:
(1인터페이스는 자신의 멤버 변수를 가질 수 있지만, 암시적으로 public static final로 지정되며, public static final 만이 될 수 있습니다. 인터페이스의 모든 메서드는 추상 메서드로, 암시적으로 public abstract로 지정됩니다.
(2)인터페이스는 추상 메서드만 정의하며 구체적인 구현을 포함하지 않습니다;
(3)인터페이스를 구현하는 클래스는 인터페이스에서 정의된 모든 메서드를 구현해야 합니다;
3、위의 이론이 정확한지 확인합니다
또한, 위의 이론이 모두 정확하다는 것을 확인했습니다!
三、추상 클래스와 인터페이스의 차이:
1、추상 클래스에는 자신의 멤버 메서드와 그들의 구체적인 구현이 포함될 수 있습니다; 인터페이스에는 추상 메서드만 포함될 수 있습니다;
2、추상 클래스에는 여러 유형의 멤버 변수가 포함될 수 있습니다; 인터페이스의 멤버 변수는 반드시 public static final이어야 합니다;
3、한 클래스는 하나의 추상 클래스를 상속받을 수 있지만 여러 인터페이스를 구현할 수 있습니다;
4、추상 클래스에는 정적 코드 블록과 정적 메서드가 포함될 수 있습니다; 인터페이스에는 정적 코드 블록과 정적 메서드를 정의할 수 없습니다;
验证一个类只能继承一个 abstract class, but can implement multiple interfaces
먼저, 두 개의 추상 클래스를 정의합니다: 하나는 Mummals哺乳类이고, 하나는 Crawler爬行类입니다
/** * @createtime 2017년3월17일요일 오전10:33:27 * @description 哺乳类 */ public abstract class Mammals { public String foods; public abstract void nurse(); public void eat(String food){ this.foods = food; System.out.println("吃"+foods); } }
/** * * @createtime 2017년3월17일요일 오전11:23:09 * @description 추상 클래스 정의--爬行类 */ public abstract class Crawler { public abstract void crawl(); }
또한, 두 개의 인터페이스를 정의합니다: 하나는 BaseAction 기본 인터페이스이고, 하나는 SpecialAction 특별 인터페이스입니다
/** * * @createtime 2017년3월17일요일 오전11:03:42 * @description 기본 행동으로 이름을 가진 인터페이스 정의 */ public interface BaseAction { public String name = ""; public void eat(); public void sleep(); }
/** * @createtime 2017년3월17일요일 오전11:24:56 * @description 특별한 행동을 구현하는 인터페이스 정의 */ public interface SpecialAction { public void study(); }
그런 다음, 기본 클래스 People을 정의하고 Mummals 클래스를 상속받아 BaseAction 인터페이스와 SpecialAction 인터페이스를 구현합니다
/** * @createtime 2017년3월17일요일 오전11:25:48 * @description 일반 클래스 정의--인류, 유생류를 상속하고 기본 인터페이스 및 특수 인터페이스를 구현 */ public class People extends Mammals implements BaseAction, SpecialAction{}} @Override public void study() { // TODO 자동-생성된 메서드 스탑 } @Override public void eat() { // TODO 자동-생성된 메서드 스탑 } @Override public void sleep() { // TODO 자동-생성된 메서드 스탑 } @Override public void nurse() { // TODO 자동-생성된 메서드 스탑 } }
하나의 서브 클래스는 여러 인터페이스를 구현할 수 있습니다
마지막으로, 기본 클래스 People가 Mammals 클래스와 Crawler 클래스를 동시에 상속하도록 합니다
/** * @createtime 2017년3월17일요일 오전11:25:48 * @description 일반 클래스 정의--인류, 유생류를 상속하고 기본 인터페이스 및 특수 인터페이스를 구현 */ public class People extends Mammals, Crawler { @Override public void nurse() { // TODO 자동-생성된 메서드 스탑 } }
정리
이 문서에서 자바의 추상 클래스와 인터페이스에 대한 개인적인 이해에 대한 모든 내용을 다루었습니다. 많은 도움이 되었기를 바랍니다. 관심이 있는 분은 이 사이트에서 계속 참고할 수 있습니다:
스프링에서 bean의 상속 및 추상 코드 예제
hibernate 핵심 아이디어 및 인터페이스 간단 설명
자바에서 인터페이스(interface) 및 사용 방법 예제
불충분한 부분이 있으면 댓글을 통해 지적해 주세요. 친구들에게 이 사이트를 지지해 주셔서 감사합니다!
성명: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으면 이메일을 notice#w로 보내 주시기 바랍니다.3codebox.com(보고할 때는 #을 @으로 변경하십시오.)를 통해 신고하시고 관련 증거를 제공하시면, 사실을 확인하면 이 사이트는 즉시 저작권 침해 내용을 삭제합니다.