Java 인터페이스와 추상적인 클래스 차이에 대한 노트

9015 단어 AndroidJava
인터페이스와 추상류의 차이에 대해 자신이 이해할 수 있도록 설명한다.

개시하다


왜 이 두 개가 있지?나는 학습회에 참가하는 것과 같은 의문을 가진 사람이 매우 많다는 것을 발견했다.한 번은 스스로 이해했지만 까먹어서 생각이 났어요.잊어버려도 수시로 참고할 수 있도록 여기에 적으세요.자신에게 거듭 의문을 제기하고 납득할 만한 설명을 하기 때문에 여기에 회화 형식으로 담으려고 한다.자바 초보자 A가 하나씩 질문을 하는 것 같아서 자바 중급자 B가 대답했다.
아마도 자바 문법을 한 번 배운 초보자의 모호함을 해소할 수 있을 것 같다.또 회화의 내용은 다음과 같은 책에서 쓴 글을 스스로 음미한 것이다.Java를 제대로 배우지 않고 안드로이드 프로그래밍을 시작한 저에게는 아주 알기 쉽고 정확한 설명으로 도움이 됐습니다.
Android 엔지니어를 위한 현대 Java
B씨가 한 말의 일부와 관련해서는 다소'이런 거겠지'라는 독자적인 해석이 담겨 있기 때문에 잘못된 부분이 있으면 지적해달라.

인터페이스와 추상류


인터페이스와 추상 폴더를 어떻게 구분해서 사용해야 좋을까요
B:"기본적으로 다중 계승이 가능한 인터페이스를 사용하면 좋지 않나요?"
A:"그럼 추상반은 무엇을 위한 거죠? 인터페이스처럼 다중 계승을 할 수도 없고, 좋은 점도 잘 모르겠어요."
B:"추상류가 인터페이스보다 우수한 것은 구체적인 실현이 가능하기 때문이다.인터페이스는 상수와 추상적인 방법만 가지고 있다.Android 엔지니어를 위한 현대 Java끼워 넣은 static 클래스/인터페이스가 있지만 여기서는 언급하지 않음), 추상 클래스는 일반적인 방법(이하'일반적인 방법'이라고 함)과 구조기가 있을 수 있음
A:"응응"
B:"따라서 예를 들어 부하의 모든 학급이 같은 내용을 처리하는 방법과 개별적으로 내용을 처리하는 방법을 바꾸려고 한다면 인터페이스보다 추상류를 사용하는 것이 좋다. 만약 처리 방법이 완전히 같다면 추상류의 일반적인 방법에 쓰면 그 학급은 그것을 그 교실에 쓴다."그런대로 쓸 수 있으니까요."
A:"구체적인 예를 알려주세요."
B: 그래픽(Figure)이 모류이고 삼각형(Triangle) 사각형(Rectangle)이 자류라고 가정합니다.이러한 범주에는 다음과 같은 필드와 방법이 있습니다."
1. 학급마다'넓이(width)'와'높음(height)'이 있다.
2.'너비(width)'와'높이(height)'를 출력하는 방법'show width and height()'.
3. 면적을 구하는 방법이 있는 "getarea(").
B:"코드로 표시하면 다음과 같은 느낌이 들어요."
Figure.java
public abstract class Figure {
    //フィールド
    protected double width;
    protected double height;

    //コンストラクタ
    public Figure(double width, double height) {
       this.width = width;
       this.height = height;
    }

    //幅と高さを出力
    public String show_width_and_height() {
        return "幅は" + String.valueOf(width) + "、" 
                                  + "高さは" + String.valueOf(height); 
    }

    //面積を出力(抽象メソッド)
    pubic abstract double getArea();
}
Triangle.java
public class Triangle extends Figure {
    //コンストラクタ
    public Triangle(int width, int height) {
       super(width, height);
    }

    //三角形の面積を出力
    @override
    pubic double getArea() {
        return this.width * this.height / 2;
    }
}
Rectangle.java
public class Rectangle extends Figure {
    //コンストラクタ
    public Rectangle(double width, double height) {
       super(width, height);
    }

    //四角形の面積を出力
    @override
    public double getArea(){
        return this.width * this.height;
    }
}
B:"Figure는 추상적인 클래스로 작성되었습니다. width와 height를 필드로 정의하고 Show width and height () 를 일반적인 방법으로 getarea ()추상적인 방법으로 삼다.인터페이스를 연결하는 방법은 추상적인 방법만 있고 추상적인 반에는 보통 방법이 있다.width、height、show_width_and_하이트(height)는 피그르에서 트라이앵글, 렉탱글로 계승되기 때문에 자반에서 다시 쓸 필요가 없다.인터페이스라면 이런 구체적인 실시 방식은 학급에 이관할 수 없다.
A:"그랬구나!"
B:"그리고 getarea()는 추상적인 방법입니다. 왜일까요? 삼각형과 사각형의 면적 요구 방법이 다르기 때문에 아이들에게 맡기고 싶은 의도가 있어요."
A:"그런데 면적을 구하는 방법은 내용을 위선적인 일반적인 방법으로 다시 쓰게 하는 방법도 있지 않나요? 더 나아가 getarea()는 Figure에 쓰지 않고 각자의 하위 클래스에 쓸 수도 있겠죠?"
B:그럴 수 있지만 이렇게 되면 코드를 쓰는 사람이 자반에서 getarea()실현될 수 있을 것이라고 장담할 수 없다.이것을 보증할 때 추상류가 좋은 역할을 한다.추상 클래스는 자신이 가지고 있는 추상 방법을 부하 클래스에 강제로 덮어씌워 설치 누락을 방지할 수 있다.이 점은 인터페이스와 같은 거죠."
A:"이 기능은 필수입니다. 잘못된 것이라고 주장해야 합니다."
B:"다른 차이점은 추상류는 등급 계층의 일부분에 속하고 인터페이스는 독립적이라는 점이다. 정확하지는 않지만 자바 세계 등급의 대략적인 패턴도를 썼으니 확인해 주세요."

B:이어 "클래스를 정의할 때 상속원을 명확히 나타내지 않더라도 클래스 계층의 정점에 있는 Object 클래스를 은연중에 계승한다"며 "이미 존재하는 클래스 계층이 추가됐다는 의미"라며 "인터페이스는 클래스 계층에서 독립된 것이기 때문에 어떤 클래스든 자유롭게 연관될 수 있다"고 덧붙였다.또한 Abstract Map이라는 추상 클래스는 Object 클래스의 하위 클래스로 HashMap, TreeMap 등 구체적인 클래스의 부 클래스이다.추상류가 학급 내부에 박혀 있다는 것이다.인터페이스가 반이 아니기 때문에 이렇게 할 수 없습니다.
A:네가 나에게 설명해 주면 완전히 달라질 거야.

최후


이 두 가지가 어떻게 다른지 나는 이미 상당히 깊이 이해했다고 생각한다. 그러나 구체적인 구별을 어떻게 사용해야 하는지에 대해서는 틀림없이 매우 심오하겠지.수정 버전 Java 언어 학습 디자인 모드 추가 시작 같은 데서 자세히 쓴 것 같아요.사실 예전에 샀는데 별로 안 봐요.새로 깨달은 게 있으면 추가될지도 몰라.

좋은 웹페이지 즐겨찾기