java開發三年,這些介面你都不會用 怎麼漲工資?

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/07/23/13367734.html
-Advertisement-
Play Games

介面概述: 1、介面是Java語言中的一種引用類型,是方法的"集合",所以介面的內部主要就是定義方法,包含常量,抽象方法(JDK 7及以前),額外增加預設方法和靜態方法(JDK 8),額外增加私有方法(jdk9)。 介面的定義,它與定義類方式相似,但是使用 interface 關鍵字。它也會被編譯成 ...


介面概述:

1、介面是Java語言中的一種引用類型,是方法的"集合",所以介面的內部主要就是定義方法,包含常量,抽象方法(JDK 7及以前),額外增加預設方法和靜態方法(JDK 8),額外增加私有方法(jdk9)。

介面的定義,它與定義類方式相似,但是使用 interface 關鍵字。它也會被編譯成.class文件,但一定要明確它並不是類,而是另外一種引用數據類型。

public class 類名.java–>.class

public interface 介面名.java–>.class

介面的使用,它不能創建對象,但是可以被實現(implements ,類似於被繼承)。一個實現介面的類(可以看做是介面的子類),需要實現介面中所有的抽象方法,創建該類對象,就可以調用方法了,否則它必須是一個抽象類。
2、光理論還是不夠的、在此給大家免費贈送2020最新5大JAVA架構項目實戰教程及大廠面試題庫,有興趣的可以進裙 783802103 獲取,小白勿進哦!

定義格式

public interface 介面名稱 {
    // 常量
    // 抽象方法
    // 預設方法(jdk8)
    // 靜態方法(jdk8)
    // 私有方法(jdk9)
}
複製代碼

案例

public interface IA {
    // 常量 預設修飾符 public static final  這三個修飾符可以省略
    public static final int NUM1 = 10;
    int NUM2 = 20;

    // 抽象方法 預設修飾符 public abstract 這2個修飾符可以省略
    public abstract void method1();
    void method2();

    // 預設方法 預設修飾符 public default public修飾符可以省略,default不可以省略
    public default void method3(){
        System.out.println("預設方法 method3");
    }

    default void method4(){
        System.out.println("預設方法 method4");
    }

    // 靜態方法: public static修飾  static修飾符不可以省略 public可以省略
    public static void method5(){
        System.out.println("靜態方法 method5");
    }

     // 私有靜態方法 使用private static修飾  不可以省略
     private static void method6(){
        System.out.println("私有靜態方法 method6");
    }

    // 私有非靜態方法 使用private修飾
    private  void method7(){
        System.out.println("私有靜態方法 method7");
    }
}

public class Test {
    public static void main(String[] args) {
       
        System.out.println(IA.NUM1);// 10
    }

    // 類中的預設方法,使用預設許可權修飾符(空)
    void method(){

    }
}


複製代碼

介面中成員的訪問特點

介面中成員訪問特點概述

  介面中成員的訪問特點:
                介面中的常量: 主要是供介面直接使用
                介面中的抽象方法: 供實現類重寫的
                介面中的預設方法: 供實現類繼承的(實現類中可以直接調用,實現類對象也可以直接調用)
                介面中的靜態方法: 只供介面直接調用,實現類繼承不了
                介面中的私有方法: 只能在介面中直接調用,實現類繼承不了

複製代碼

案例演示

public interface IA {
    //  介面中的常量: 主要是供介面直接使用
    public static final int NUM = 10;

    // 介面中的抽象方法: 供實現類重寫的
    public abstract void method1();

    // 介面中的預設方法: 供實現類繼承使用(實現類中可以直接調用,實現類對象也可以直接調用)
    public default void method2(){
        System.out.println("預設方法method2");
        method4();
        method5();
    }

    // 介面中的靜態方法: 只供介面直接調用,實現類繼承不了
    public static void method3(){
        System.out.println("靜態方法method3");
        method5();
    }

    // 介面中的私有方法: 只能在介面中直接調用,實現類繼承不了
    private void method4(){// 只能在介面的預設方法中調用
        // 方法體
        method5();
    }

    private static void method5(){//
        // 方法體
    }
}

實現類:

public class ImpA implements IA{

   /* @Override
    public void method2() {

    }*/

    @Override
    public void method1() {
        System.out.println("重寫介面中的method1抽象方法");
    }
}


測試類:

public class Test {
    public static void main(String[] args) {
      
        System.out.println(IA.NUM);// 10

        // 創建實現類對象,訪問NUM常量
        ImpA ia = new ImpA();
        System.out.println(ia.NUM);// 10

        // 調用method2方法
        ia.method2();

        // 通過介面名調用介面中的靜態方法
        IA.method3();
        //ia.method3();// 編譯報錯,
    }
}

複製代碼

多實現時的幾種衝突情況

公有靜態常量的衝突: 多個父介面中,相同的常量不能被繼承 - 公有抽象方法的衝突: 實現類必須重寫一次 公有預設方法的衝突: 實現類必須重寫 公有靜態方法的衝突: 無影響,因為靜態方法實現類不能繼承 私有方法的衝突: 無影響,因為私有方法只能在本介面中直接訪問,實現類不能繼承 實現類重寫介面中的預設方法,不需要加default

公有靜態常量的衝突

實現類不繼承衝突的變數

interface IA{
    public static final int a = 10;
    public static final int b= 20;
}
interface IB{
    public static final int a = 30;
}
class Zi implements IA,IB{
    //只繼承了b,沒有繼承a,因為a衝突了
}

public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
     //   System.out.println(z.a);//編譯錯誤
        System.out.println(z.b);
    }
}


複製代碼

公有抽象方法的衝突

實現類只需要重寫一個

interface IA{
    public void show();
}
interface IB{
    public void show();
}
class Zi implements IA,IB{
    @Override
    public void show() {//子類只需要重寫一個show()即可
        System.out.println("子類的show()...");
    }
}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}

複製代碼

公有預設方法的衝突

實現類必須重寫一次最終版本

interface IA{
    public default void show(){
        System.out.println("IA");
    }
}
interface IB{
    public default void show(){
        System.out.println("IB");
    }
}
class Zi implements IA,IB{
    @Override
    public void show() {//必須重寫一次的show()
        System.out.println("Zi的show()....");
    }
}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}


複製代碼

公有靜態方法的衝突

靜態方法是直接屬於介面的,不能被繼承,所以不存在衝突

interface IA{
    public static  void show(){
        System.out.println("IA");
    }
}
interface IB{
    public static void show(){
        System.out.println("IB");
    }
}
class Zi implements IA,IB{

}
public class Demo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();//編譯錯誤,show()不能被繼承。
    }
}



複製代碼

私有方法的衝突

私有方法只能在本介面中直接使用,不存在衝突

介面和介面的關係

介面可以“繼承”自另一個“介面”,而且可以“多繼承”

interface IA{}
interface IB{}
interface IC extends IA,IB{//是“繼承”,而且可以“多繼承”
}
複製代碼

介面繼承介面的衝突情況

公有靜態常量的衝突: 不能被繼承,使用不了 公有抽象方法的衝突: 只繼承一個 公有預設方法的衝突: 必須重寫一次 公有靜態方法和私有方法的衝突 : 無影響,因為不能被子介面繼承

公有靜態常量的衝突

interface IA{
    public static final int a = 10;
    public static final int b = 30;
}
interface IB{
    public static final int a = 20;
}
interface IC extends IA,IB{//沒有繼承a
}
//測試:
main(){
    System.out.println(IC.a);//錯誤的
}

複製代碼

公有抽象方法衝突

interface IA{
    public void show();
}
interface IB{
    public void show();
}
interface IC extends IA,IB{//IC只繼承了一個show()
}
class Zi implements IC{
    //重寫一次show()
    public void show(){
    }
}

複製代碼

公有預設方法的衝突

interface IA{
    public default void d1(){
    }
}
interface IB{
    public default void d1(){
    }
}
interface IC extends IA,IB{//必須重寫一次d1()
    public default  void d1(){
    }
}

複製代碼

公有靜態方法和私有方法

不衝突,因為靜態方法是直接屬於介面的,只能使用介面直接訪問,而私有方法只能在介面中訪問,也沒有衝突 實現類繼承父類又實現介面時的衝突

定義格式

public class 實現類名 extends 父類名 implements 介面名1,介面名2,...{           }
複製代碼

實現類繼承父類又實現介面時的衝突:

公有靜態常量的衝突–>沒有繼承 公有抽象方法的衝突—>重寫 公有預設方法的衝突—>優先父類 公有靜態方法---->優先父類 私有方法的衝突—> 沒有衝突

父類和介面的公有靜態常量的衝突

class Fu{
    public static final int a = 10;
}
interface IA{
    public static final int a = 20;
}
class Zi extends Fu implements IA{//沒有繼承a變數
}
public class Demo {
    public static void main(String[] args) {
        System.out.println(Zi.a);//編譯錯誤
    }
}


複製代碼

父類和介面的抽象方法衝突

abstract class Fu{
    public abstract void show();
}
interface IA{
    public void show();
}
class Zi extends Fu implements IA{// 必須重寫
    
}
//測試:
main(){
    Zi z = new Zi();
    z.show();//a
}


複製代碼

父類和介面的公有預設方法的衝突

class Fu{
    public void show(){
        System.out.println("a");
    }
}
interface IA{
    public default void show(){
        System.out.println("b");
    }
}
class Zi extends Fu implements IA{
}
//測試:
main(){
    Zi z = new Zi();
    z.show();//a
}

複製代碼

父類和介面的公有靜態方法

class Fu{
    public static void show(){
        System.out.println("fu...");
    }
}
interface IA{
    public static void show(){
        System.out.println("IA...");
    }
}
class Zi extends Fu implements IA{//只繼承了"父類"的靜態方法,沒有繼承介面的靜態方法

}
public class Demo {
    public static void main(String[] args) {
        Zi.show();//fu…
    }
}

複製代碼

父類和介面的私有方法

不存在衝突

最後

大家看完有什麼不懂的可以找我。另外給大家免費贈送2020最新5大JAVA架構項目實戰教程及大廠面試題庫,有興趣的可以進裙 783802103 獲取,小白勿進哦!

本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、jQuery初體驗 使用jQuery給一個按鈕綁定單擊事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src ...
  • 模板 模版是純文本文件,可以生成任何基於文本的文件格式,比如HTML,XML,CSV等。Django模版語言致力於在性能和簡單性上取得平衡。Django的模版系統並不是簡單的將Python嵌入到HTML中。 下麵是一個小模版,它展示了一些基本的元素。 {% extends "base_generic ...
  • 5G的到來證明瞭互聯網行業發展一如既往的快,作為一名開發人員(Java崗)夢想自然是互聯網行業的大廠,這次我的一個學員拿到了杭州的一個研究院offer,透露一下,年薪50多萬,保底16,在這裡分享一撥面試過程! 一面 自我介紹,主要講講做了什麼和擅長什麼 設計模式瞭解哪些? AtomicIntege ...
  • 先來看看本節知識的結構圖吧! 接下來我們就逐步來看一下所有的知識點: 結構的演化 C++中的類是從結構演變而來的, 所以我們可以稱C++為”帶類的C”. 結構發生質的演變 C++結構中可以定義函數, 稱之為成員函數 結構定義格式, 像這樣: struct 結構名 { 數據成員; 成員函數; }; / ...
  • 這幾年為什麼Python在中國就火起來了? Python這個東西國,大概是從2017年末開始,突然就火了起來的。此前,對於Python,乃至編程,絕大多數程度上都是專業人士的話題,在普通大眾層面上起不了波瀾。在中國,大概是從2017年末開始,突然就火了起來的。此前,對於Python,乃至編程,絕大多 ...
  • 1.首先手機安裝Xposed(app) 2.安裝Fdex2(app) 3.打開Fdex2 4.點擊要脫殼的app 5.adb pull (點擊脫殼app時候彈出的來的路徑) 保存本地路徑 6.完結-.- 後面湊字數........................................... ...
  • 例如導出指定文件夾中的所有mp4文件的文件名 1 @echo off 2 for /r C:\Users\Administrator\Desktop\video %%i in (*.mp4) do ( 3 echo %%i 4 echo %%i>>C:\Users\Administrator\Des ...
  • 看到一篇關於Java學習體系的總結,在這裡給大家分享一下: 一、Java SE部分 java基礎:基礎語法;面向對象(重點);集合框架(重點);常見類庫API;java界面編程:AWT;事件機制;Swing;java高級知識:Annotation;IO和NIO、AIO;多線程、線程池;阻塞、非阻塞、 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...