首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 每日一題 20161102:接口默認方法與實現類編譯原理解析

     編輯:Java 綜合教學

Java 每日一題 20161102:接口默認方法與實現類編譯原理解析

今日題目考察:類實現接口但未重寫接口方法,且接口無默認方法,代碼能否編譯通過?

題目代碼

package Nov2016;
public class Ques1102 implements Parent {
    @Override
    public void method() { } // 實現了接口方法
}

interface Parent {
    public void method(); // 無默認實現
}

問題

請問主程序輸出結果是?(注意:題目未提供 main 方法)

答案與解析

✅ 編譯通過,但無輸出

  • Ques1102 實現了 Parent 接口,並用 @Override 正確實現了 method(),滿足接口契約
  • 類中沒有 main 方法,直接運行該類會報錯:Error: Main method not found in class Nov2016.Ques1102
  • 若補上 public static void main(String[] args) { new Ques1102().method(); },程序正常運行,**無任何輸出** (方法體為空)

知識點延伸:Java 8 接口新特性

特性語法實現類要求
抽象方法void foo();必須實現 (除非類是 abstract)
默認方法default void foo() { ... }可選實現,繼承默認行為
靜態方法static void bar() { ... }不可繼承,只能 Parent.bar() 調用
私有方法 (Java 9)private void helper() { ... }接口內部復用,不可繼承

陷阱提醒

  1. 接口方法默認 public abstract:實現類方法**訪問權限不能更低**,必須是 public
  2. 菱形繼承衝突:實現兩個含同名默認方法的接口,**必須顯式重寫**並選擇調用 InterfaceA.super.foo()
  3. 函數式接口:僅含一個抽象方法的接口,可用 Lambda 表達式實例化

題目設計意圖:考察對「接口契約」與「類完整性」的理解。無 main 方法無法直接運行,但編譯期類結構合法。面試常作為「編譯 vs 運行」區分的入門題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved