最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中抽象類和接口的使用及區(qū)別分析

 更新時(shí)間:2025年10月30日 10:16:45   作者:念越  
抽象類中可以包含普通方法和字段,這樣的包含普通方法和字段可以被子類直接使用,不用重寫(xiě),而接口中不能包含普通方法,子類必須重寫(xiě)所有的抽象方法,下面通過(guò)本文介紹Java中抽象類和接口的使用,感興趣的朋友一起看看吧

一、 抽象類

1、概念

在面向?qū)ο蟮母拍钪?,所有的?duì)象都是通過(guò)類來(lái)描繪的,但是反過(guò)來(lái),并不是所有的類都是用來(lái)描繪對(duì)象的,如果一個(gè)類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類。
舉個(gè)例子

1.這里Animal類是動(dòng)物類,每個(gè)動(dòng)物都有自己的叫法,但這里Animal不是一個(gè)具體的動(dòng)物,里面的bark()方法無(wú)法具體實(shí)現(xiàn)。
2.Dog是狗類屬于動(dòng)物,與Animal類是繼承關(guān)系,狗是一種具體的動(dòng)物,所以里面的bark()方法可以被具體實(shí)現(xiàn)。
3.Cat是貓類屬于動(dòng)物,與Animal類是繼承關(guān)系,貓是一種具體的動(dòng)物,所以里面的bark()方法可以被具體實(shí)現(xiàn)。
4.因此,這里的Animal類可以設(shè)計(jì)為抽象類。

2、抽象類語(yǔ)法

在Java中,一個(gè)類如果被 abstract 修飾稱為抽象類,抽象類中被 abstract 修飾的方法稱為抽象方法,抽象方法不用給出具體的實(shí)現(xiàn)體。抽象類也是類,內(nèi)部可以包含普通方法和屬性,甚至構(gòu)造方法。
舉個(gè)例子:

//抽象類
public abstract class Animal {
    public int age;
    abstract public void eat();  //抽象方法
    public Animal(int a) {
        this.age = a;
    }
}

3、抽象類的特性

3.1抽象類不能直接實(shí)例化對(duì)象

Animal抽象類

public abstract class Animal {
    public int age;
    abstract public void eat();  //抽象方法
    public Animal(int a) {
        this.age = a;
    }
}

Dog類繼承Animal抽象類

public class Dog extends Animal{
    public void eat() {
        System.out.println("汪汪叫...");
    }
    public void sleep(){
        System.out.println("小狗正在睡覺(jué)....");
    }
    public Dog(int age){
        super(age);
    }
}

Test測(cè)試類

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();  //error
    }
}

這里實(shí)例化Animal抽象類,編譯器報(bào)錯(cuò)。

3.2抽象方法不能是private

public abstract class Animal {
    public int age;
    abstract private void bark(); //error,抽象方法不能是私有的
    abstract public void eat();  //抽象方法
}

3.3抽象方法不能被final和static修飾,因?yàn)槌橄蠓椒ㄒ蛔宇愔貙?xiě)

public abstract class Animal {
    public int age;
    abstract final public void eat(); //error
    abstract public static void bark();//error
}

3.4抽象類必須被繼承,并且繼承后子類要重寫(xiě)父類中的抽象方法,否則子類也是抽象類,必須要使用 abstract 修飾

Animal抽象類

public abstract class Animal {
    public int age;
    abstract public void eat();  //抽象方法
    public Animal(int a) {
        this.age = a;
    }
}

Dog類繼承Animal抽象類

public class Dog extends Animal{
    public void eat() {
        System.out.println("汪汪叫...");
    }
    public void sleep(){
        System.out.println("小狗正在睡覺(jué)....");
    }
    public Dog(int age){
        super(age);
    }
}

這里Dog類繼承了Animal抽象類,并且Dog類重寫(xiě)了Animal抽象類中的eat()抽象方法。

3.5抽象類中不一定包含抽象方法,但是有抽象方法的類一定是抽象類

public abstract class Animal {
    public int age;
    public Animal(int a) {
        this.age = a;
    }
}

這里Animal是抽象類,但里面沒(méi)有包含抽象方法,是可以正常編譯的。

public class Dog extends Animal{    //error
    abstract public void sleep(){
        System.out.println("小狗正在睡覺(jué)....");
    }
    public void eat() {
        System.out.println("汪汪叫...");
    }
    public Dog(int age){
        super(age);
    }
}

這里Dog類不是抽象類,如果里面寫(xiě)了抽象方法,則編譯器會(huì)報(bào)錯(cuò)。

3.6抽象類中可以有構(gòu)造方法,供子類創(chuàng)建對(duì)象時(shí),初始化父類的成員變量

這里上面的代碼中已經(jīng)體現(xiàn)到了。

4、 抽象類的作用

使用抽象類的場(chǎng)景就如上面的代碼, 實(shí)際工作不應(yīng)該由父類完成, 而應(yīng)由子類完成. 那么此時(shí)如果不小心誤用成父類了, 使用普通類編譯器是不會(huì)報(bào)錯(cuò)的. 但是父類是抽象類就會(huì)在實(shí)例化的時(shí)候提示錯(cuò)誤, 讓我們盡早發(fā)現(xiàn)問(wèn)題。使用抽象類相當(dāng)于多了一重編譯器的校驗(yàn)。

二、接口

1、概念

在Java中,接口可以看成是:多個(gè)類的公共規(guī)范,是一種引用數(shù)據(jù)類型。

2、接口的語(yǔ)法和使用

1.接口的定義格式與定義類的格式基本相同,將class關(guān)鍵字換成 interface 關(guān)鍵字,就定義了一個(gè)接口。

public interface 接口名稱{
//抽象方法
void method();
}

2.接口不能直接使用,必須要有一個(gè)"實(shí)現(xiàn)類"來(lái)"實(shí)現(xiàn)"該接口,實(shí)現(xiàn)接口中的所有抽象方法。

public class 類名 implements 接口名稱{
}

3.注意事項(xiàng)
子類和父類之間是extends 繼承關(guān)系,類與接口之間是 implements 實(shí)現(xiàn)關(guān)系。

3、接口的特性

1.接口中的成員變量默認(rèn)是public static final修飾的。

2.接口中的抽象方法,默認(rèn)都是public abstract修飾的。
舉個(gè)例子:Ishape接口

public interface IShape { 
    int c = 20; //成員變量默認(rèn)是public static final 修飾的
    void draw(); //默認(rèn)是abstract修飾的
}

3.如果接口當(dāng)中的方法被default或者static修飾,那么可以有具體實(shí)現(xiàn)。

public interface IShape {
     default void test(){
         System.out.println("default.....");
     }
     static void test1(){
       System.out.println("static.....");
}

4.接口不可以進(jìn)行實(shí)例化。
5.類和接口之間可以使用關(guān)鍵字implements實(shí)現(xiàn)接口。
舉個(gè)例子:
IShape接口

public interface IShape { 
    void draw(); //默認(rèn)是abstract修飾的
}

Cycle類

public class Cycle implements IShape{
    @Override
    public void draw() {
        System.out.println("畫(huà)一個(gè)圓圈.....");//必須實(shí)現(xiàn)接口當(dāng)中的抽象方法
    }
}

6.一個(gè)接口對(duì)應(yīng)一個(gè)字節(jié)碼文件。
7.重寫(xiě)接口中方法時(shí),不能使用默認(rèn)的訪問(wèn)權(quán)限。(子類的重寫(xiě)方法權(quán)限要大于等于父類)
8.接口中不能有靜態(tài)代碼塊和構(gòu)造方法。
9.如果類沒(méi)有實(shí)現(xiàn)接口中的所有的抽象方法,則類必須設(shè)置為抽象類。

4、一個(gè)類實(shí)現(xiàn)多個(gè)接口

接下來(lái)我會(huì)通過(guò)代碼來(lái)闡述一個(gè)類實(shí)現(xiàn)多個(gè)接口
舉個(gè)例子
Animal抽象類

public abstract class Animal {
    public String name;
    public int age;
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public abstract void eat();
}

IRunning 接口

public interface IRunning {
    void run();
}

ISwimming 接口

public interface ISwimming {
    void swim();
}

Frog類繼承Animal抽象類并實(shí)現(xiàn)了IRunning,ISwimming兩個(gè)接口

public class Frog extends Animal implements IRunning,ISwimming{
    public Frog(String name, int age) {
        super(name, age);
    }
     public void sleep(){
         System.out.println(this.name+"正在睡覺(jué)...");
     }
    @Override
    public void eat() {
        System.out.println(this.name+"正在吃蟲(chóng)子...");
    }
    @Override
    public void run() {
        System.out.println(this.name+"正在跑步..");
    }
    @Override
    public void swim() {
        System.out.println(this.name+"會(huì)游泳.....");
    }
}

Test測(cè)試類

public class Test {
    public static void swimming(ISwimming iSwimming){
        iSwimming.swim();
    }
    public static void running(IRunning iRunning){
        iRunning.run();
    }
    public static void main(String[] args) {
        swimming(new Frog("小蛙",1));
        running((new Frog("小綠",2)));
    }

打印結(jié)果

上述代碼:一個(gè)Frog類實(shí)現(xiàn)了IRunning,ISwimming兩個(gè)接口,從而闡述了一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

三、抽象類和接口的區(qū)別

抽象類中可以包含普通方法和字段,這樣的包含普通方法和字段可以被子類直接使用,不用重寫(xiě)。而接口中不能包含普通方法,子類必須重寫(xiě)所有的抽象方法。

到此這篇關(guān)于Java中抽象類和接口的使用及區(qū)別分析的文章就介紹到這了,更多相關(guān)java抽象類和接口使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中死鎖的原理實(shí)戰(zhàn)分析

    Java中死鎖的原理實(shí)戰(zhàn)分析

    這篇文章主要介紹了Java中死鎖的原理,結(jié)合具體案例形式分析了java死鎖形成的相關(guān)原理,需要的朋友可以參考下
    2019-08-08
  • java 實(shí)現(xiàn)增量同步和自定義同步的操作

    java 實(shí)現(xiàn)增量同步和自定義同步的操作

    這篇文章主要介紹了java 實(shí)現(xiàn)增量同步和自定義同步的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Spring Boot 基于注解的 Redis 緩存使用詳解

    Spring Boot 基于注解的 Redis 緩存使用詳解

    本篇文章主要介紹了Spring Boot 基于注解的 Redis 緩存使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用

    Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用

    這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達(dá)式運(yùn)用 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • Java中l(wèi)ambda表達(dá)式實(shí)現(xiàn)aop切面功能

    Java中l(wèi)ambda表達(dá)式實(shí)現(xiàn)aop切面功能

    本文主要介紹了Java中l(wèi)ambda表達(dá)式實(shí)現(xiàn)aop切面功能,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring中的事務(wù)攔截器順序如何控制詳解

    Spring中的事務(wù)攔截器順序如何控制詳解

    這篇文章主要介紹了Spring中的事務(wù)攔截器順序如何控制詳解,那么spring事務(wù)攔截器的順序如何控制呢,若我們自己也添加了一些攔截器,此時(shí)事務(wù)攔截器和自定義攔截器共存的時(shí)候,他們的順序是怎么執(zhí)行的?如何手動(dòng)來(lái)控制他們的順序,需要的朋友可以參考下
    2024-01-01
  • SpringCache緩存抽象之CacheManager與自定義鍵生成方式

    SpringCache緩存抽象之CacheManager與自定義鍵生成方式

    本文將深入探討Spring Cache的核心組件CacheManager及自定義鍵生成策略,幫助開(kāi)發(fā)者掌握緩存配置與優(yōu)化技巧,從而構(gòu)建高效可靠的緩存系統(tǒng),希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • JAVA 十六進(jìn)制與字符串的轉(zhuǎn)換

    JAVA 十六進(jìn)制與字符串的轉(zhuǎn)換

    筆者前幾日在開(kāi)服過(guò)程中需要將字符串轉(zhuǎn)化成為16進(jìn)制的字符串,在網(wǎng)上找到了一些方法嘗試之后,均發(fā)現(xiàn)存在一個(gè)問(wèn)題-->字符串轉(zhuǎn)為16進(jìn)制后再轉(zhuǎn)回來(lái),英文正常,中文出現(xiàn)亂碼
    2009-05-05
  • SpringAop中的Advice通知實(shí)例

    SpringAop中的Advice通知實(shí)例

    這篇文章主要介紹了SpringAop中的Advice通知詳解,Spring的AOP功能中一個(gè)關(guān)鍵概念是通知Advice與切點(diǎn)Pointcut表達(dá)式相關(guān)聯(lián)在特定節(jié)點(diǎn)織入一些邏輯,Spring提供了五種類型的通知,需要的朋友可以參考下
    2023-09-09
  • Java中Integer的parseInt和valueOf的區(qū)別詳解

    Java中Integer的parseInt和valueOf的區(qū)別詳解

    這篇文章主要介紹了Java中Integer的parseInt和valueOf的區(qū)別詳解,nteger.parseInt(s)是把字符串解析成int基本類型,Integer.valueOf(s)是把字符串解析成Integer對(duì)象類型,其實(shí)int就是Integer解包裝,Integer就是int的包裝,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

石柱| 平陆县| 吉隆县| 惠水县| 海原县| 抚松县| 泗洪县| 隆回县| 梅河口市| 石泉县| 扎赉特旗| 改则县| 青州市| 丰台区| 巴东县| 土默特右旗| 吴桥县| 江津市| 辽阳县| 保亭| 沽源县| 永川市| 临城县| 水城县| 元氏县| 石狮市| 佛山市| 中西区| 潞城市| 盐池县| 门头沟区| 七台河市| 大冶市| 古田县| 和龙市| 绥德县| 韩城市| 民权县| 临沭县| 绍兴县| 曲沃县|