제 (b)는 자바 객체 지향 인터페이스

제 (b)는 자바 객체 지향 인터페이스

앞서 언급 한 포털 : 의 자바 중심의 인터페이스 객체 ()

  • 우리는 다중 상속을 지원하지 않는 객체 지향 언어로, 이전에 대해 자바를 이야기했다. : 그러나 자바 인터페이스가 나타납니다 다중 상속 달성 할 수있는 interface A extends InterfaceC,InterfaceD형태로, 어느 정도, 증가 유연성을. 뿐만 아니라 클래스 자바는 또한 수 있다는 구현 (구현)는 여러 인터페이스는 간접적으로 상속 기능은 될 달성 할 "멀티 - 실현" .
  • 사실, 우리는 인터페이스를 이해할 때, 당신은이 완전히 합리적이다 찾을 수 있습니다. 왜 말합니까? 당신이 두 개의 클래스를 상속하는 경우, 두 개의 클래스는 이름은 같지만 행동의 다른 방법을 가지고, 당신은 자바 두통하지 무엇인지 모르는 파생 클래스에 있지 않습니다. 그러나 인터페이스는 우리가 알고있는, 동일하지 않습니다 추상적 인 인터페이스 방법이나 기본 방법은 결국 클래스 정의 구현 될 것입니다 ( 만약 두 가지 방법이 공통 서브의 구현을 모두 반환해야 다음 같은 서명을하지만 서로 다른 반환 형식, 유형 ) 때문에 선택에 어려움이 없다. 상속이 발생할 수있는 인터페이스 다음으로, 우리는 천천히 문제를 분석 할 수 있습니다.

인터페이스 정의와 인터페이스의 구현

  • extends특정 키워드를 표시하는 것은 승계를 나타냅니다, 또는 확장, 즉, 하위 인터페이스는 상위 인터페이스의 멤버를 얻을 수 있습니다. 참고 : 인터페이스 인터페이스는 상속 될 수 있지만 클래스를 상속 할 수 없습니다 오.
interface Countable {
    int NUM = 50;
}

interface Edible {
    String name = "Edible";
    void howToEat();
}
interface CreatureDoing extends Edible, Countable {
    public abstract void howToSleep();
}
  • 이어서 쉼표로 구분 인터페이스 상속 식용 및 가산 근로 개의 인터페이스를 CreatureDoing하자 상위 인터페이스 부재의 하위 인터페이스 접속을 검증 할 수있다.
System.out.println(CreatureDoing.name);//Edible
System.out.println(CreatureDoing.NUM);//50
  • 인터페이스는 인스턴스를 생성 할 수 없습니다, 인터페이스 요구 될 수있는 클래스가 구현은 , 당신은 사용에 필요한 implements키워드. 다음과 같은 형식입니다 :
//类实现多个接口
class 类 implements 接口1,接口2{}
//类继承某类,且实现多个接口
class 类1 extends 类2 implements 接口1,接口2{}
  • 유사한 인터페이스와 상속을 구현, 인터페이스의 멤버 변수와 메소드를 얻을 수 있지만, 노트는 것을 구현 클래스는 모든 인터페이스를 구현할 필요의 추상적 인 방법을 명확하게 부여하기 위해 , 그렇지 않으면 구현 클래스의 요구는 추상 클래스로 정의 할 수 있습니다. 이 문장, 비트 주위에, 우리는 인터페이스 구현 클래스의 추상 메소드 달성 할 필요가 있음을 알고, 우리는 클래스가 여러 인터페이스를 구현할 수있는 인터페이스가 인터페이스를 상속 할 수 있습니다 추가했습니다. 인터페이스는 방법 항목하는 상속 포트 B 인터페이스에 추상적 인 방법 A를 가지고 있다면, 추상적 사각형 방법 2, C 클래스 상속 두 인터페이스는 C 달성하기 위해 호출되는 클래스의 두 추상 메소드 필요가 모든 추상 메소드.

  • 또 다른 점은 구현이 선언 할 필요가 구현을 다시 작성 실제로 추상 인터페이스 방법이라는 것이다 공공 그렇지 않으면 다시 작성의 요구 사항을 충족하지 않습니다.

인터페이스와 다형성

  • 참조 데이터 형식의 종류가 상기와 직접 인터페이스 그 멤버를 호출하는 데 사용될 수있는 인터페이스 일 수있다 Creature.NUM.
  • 또한, 인터페이스가 구현 된 클래스의 객체를 가리 키도록 참조 형 변수를 선언 할 수있는 개체의 하위 클래스를 차례로 상위 클래스 변수하게 비슷, 다형 잘 반영된다.
//接口也实现了多态
Edible[] ediblesArray = new Edible[]{new Chicken(), new Orange()};
for (Edible edible : ediblesArray) {
    edible.howToEat();
}

인터페이스는 Object에서 상속되는지 여부

  • : 말을 책에서 참조 참조 변수의 모든 인터페이스 유형은 직접 Object 형식의 변수에 할당 할 수있는 이 의미하지 않는다 인터페이스 유형은 Object 클래스 그것에서 상속되기 때문에, 궁금 그래서?
    나는 시도했다 그래서 나는 변수의 인터페이스 유형이 Object 클래스의 메소드를 호출합니다
System.out.println(cd.hashCode());
  • 나는 성공적으로 호출 할 수 충격을 받았다. : 나는 정보에 대한 긴 검색을 시작 있도록하지만, 항상 회의적, 네트워크상의 데이터는 궁극적으로 내가 스택 오버 플로우의 느낌에 더 신뢰할 수있는 대답을 보는 것을 여기에 게시 고르지 계십니까를 인터페이스에서 Object 클래스에서 상속을 자바

lYwpes.png

  • 인터페이스와 클래스는 모든 클래스가 Obejct 클래스에서 상속, 그들은 참조 데이터 유형을 나타내는, 항상 평행하게,하지만 인터페이스는 없습니다. 때문에 그 이유는 왜 인터페이스 유형 변수 개체 클래스 메서드는 호출 할 수있는 인터페이스는 Object 클래스와 메소드 서명 동일한 방식의 집합을 의미 하고, 성공적으로 컴파일 할 수 이런 식으로하지 않을 경우.
  • 그리고 인터페이스 참조 형 변수 유형 오브젝트의 변수에 직접 할당 될 수 있으며, 또한 이해 될 수있다 : 상기 인터페이스는 궁극적으로 구현 클래스를 달성하기 위해 요구되므로, 기준 변수 구현 클래스의 인스턴스를 가리킨 클래스 달성 개체의 하위 클래스 그것은 전적으로 합리적이다.
package com.my.pac19;

/**
 * @auther Summerday
 */
public class TestEdible {
    public static void main(String[] args) {

        System.out.println(Countable.NUM);
        System.out.println(Edible.name);
        //接口 不能用于创建实例,但是可以声明引用类型变量指向其实现类的对象
        CreatureDoing cd = new Chicken();
        System.out.println(cd.hashCode());
        System.out.println();
        //接口也实现了多态
        Edible[] ediblesArray = new Edible[]{new Chicken(), new Orange()};
        for (Edible edible : ediblesArray) {
            edible.howToEat();
        }
    }
}

interface Countable {
    int NUM = 50;
}

interface Edible {
    String name = "Edible";

    public abstract void howToEat();
    //redundant 多余的

}

//接口继承接口
interface CreatureDoing extends Edible, Countable {
    public abstract void howToSleep();

}

abstract class Animal {

    public abstract void call();
}
class Chicken extends Animal implements Edible, CreatureDoing {
    //实现Edible中的howToEat方法
    @Override
    public void howToEat() {
        System.out.println("鸡要烤着吃");
    }
    //实现Animal中的call方法
    @Override
    public void call() {
        System.out.println("咯咯哒");
    }
    //实现Creature中的howToSleep方法
    @Override
    public void howToSleep() {
        System.out.println("呼呼");
    }
}
class Orange implements Edible {

    @Override
    public void howToEat() {
        System.out.println("橘子要剥皮吃");
    }
}

이 기사는 부적절, 환영 메시지 교환 코멘트 섹션 경우에 대해 설명!

참고 링크 :
https://stackoverflow.com/questions/6056124/do-interfaces-inherit-from-object-class-in-java?r=SearchResults
https://docs.oracle.com/javase/specs/jls/ SE7 / HTML / JLS-9.html 번호의 JLS-9.2

추천

출처www.cnblogs.com/summerday152/p/12132349.html