一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java抽象定義以及舉例代碼

Java抽象定義以及舉例代碼

2021-09-03 14:03熱度三分 Java教程

這篇文章主要給大家介紹了關于Java抽象定義以及舉例的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、概述

在OOP這個概念中,所有的對象都是通過類來描述的;但是并不是所有的類都是用來描述對象的。如果一個類沒有包含足夠的信息來描述一個具體的對象,這樣的類稱為抽象類。

抽象類:(1)抽象類不能實例化對象,如果實例化某個對象,編譯無法通過。只有抽象類的非抽象子類可以創建對象(2)可以包含:成員變量、成員方法、構造方法等。(3)構造方法、類方法(用static修飾的方法)不能聲明為抽象方法

抽象方法:(1)如果一個類包含抽象方法,那么該類一定是抽象類(2)任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類

定義:abstract class 類名

二、示例:農民喂動物

Animal:抽象類--------getName()、move()、drink()

Reptile、Mammal:繼承抽象類

蛇、老虎、山羊、兔子:分別繼承Reptile或Mammal

fammer:bringWater()、feedWater(Animal animal)---- 負責將水帶到指定的地方,然后動物移動去目的地,喝水

Java抽象定義以及舉例代碼

代碼如下:

package abstractDemo;
 
/**
 * @author lpx
 * @Description TODO
 * @date 2021-04-07
 */
public abstract class Animal {
    abstract String getName();
    abstract void move(String destination);
    abstract void drink();
}
abstract class Reptile extends Animal{
 
}
 
abstract class Mammal extends Animal{
 
}
 
class Tiger extends Mammal{
    private static String name="tiger";
 
    @Override
    String getName() {
        return this.name;
    }
 
    @Override
    void move(String destination) {
        System.out.println("tiger move to "+destination+".");
    }
 
    @Override
    void drink() {
        System.out.println("tiger lower it is head and drink");
    }
}
 
class Goat extends Mammal{
    private static String name="goat";
 
    @Override
    String getName() {
        return this.name;
    }
 
    @Override
    void move(String destination) {
        System.out.println("goat move to "+destination+".");
    }
 
    @Override
    void drink() {
        System.out.println("goat lower it head to drink");
    }
}
 
class Rabbit extends Mammal{
    private static String name="rabbit";
 
    @Override
    String getName() {
        return this.name;
    }
 
    @Override
    void move(String destination) {
        System.out.println("rabbit move to "+destination+".");
    }
 
    @Override
    void drink() {
        System.out.println("rabbit put out it is tongue and drink");
    }
}
 
class Snake extends Reptile{
    private static String name="snake";
 
    @Override
    String getName() {
        return this.name;
    }
 
    @Override
    void move(String destination) {
        System.out.println("snake move to "+destination+".");
    }
 
    @Override
    void drink() {
        System.out.println("snake dived into and drink");
    }
}
 
class Farmer{
    public void bringWater(String destination){
        System.out.println("Farmer bring water to " + destination + ".");
    }
 
    public void feedWater(Animal a){ // polymorphism
        this.bringWater("Feeding Room");
        a.move("Feeding Room");
        a.drink();
    }
 
}
 
class Test{
    public static void main(String[] args) {
        Farmer fm=new Farmer();
        Snake snake=new Snake();
        Goat goat=new Goat();
        Tiger tiger=new Tiger();
        Rabbit rabbit=new Rabbit();
 
        fm.feedWater(snake);
        fm.feedWater(goat);
        fm.feedWater(tiger);
        fm.feedWater(rabbit);
    }
}

執行結果:

Java抽象定義以及舉例代碼

總結:

如果每種動物不是抽象出drink和move方法的話,就無法實現多態。農夫類就需要根據參數的不同重載多個feedWater。如果繼續添加動物那么重載個數就越來越多。為了方便對比理解,我也按照常規思維去寫了一下,代碼如下:

package abstractDemo;
 
/**
 * @author lpx
 * @Description TODO
 * @date 2021-04-07
 */
 
class Tiger1{
    private static String name="tiger";
 
    String getName() {
        return this.name;
    }
 
    void move(String destination) {
        System.out.println("tiger move to "+destination+".");
    }
 
    void drink() {
        System.out.println("tiger lower it is head and drink");
    }
}
 
class Goat1{
    private static String name="goat";
 
    String getName() {
        return this.name;
    }
 
    void move(String destination) {
        System.out.println("goat move to "+destination+".");
    }
 
    void drink() {
        System.out.println("goat lower it head to drink");
    }
}
 
class Rabbit1{
    private static String name="rabbit";
 
    String getName() {
        return this.name;
    }
 
    void move(String destination) {
        System.out.println("rabbit move to "+destination+".");
    }
 
    void drink() {
        System.out.println("rabbit put out it is tongue and drink");
    }
}
 
class Farmer1{
    public void bringWater(String destination){
        System.out.println("Farmer bring water to " + destination + ".");
    }
 
    public void feedWater(Goat1 goat){ // polymorphism
        this.bringWater("Feeding Room");
        goat.move("Feeding Room");
        goat.drink();
    }
    public void feedWater(Tiger1 tiger){ // polymorphism
        this.bringWater("Feeding Room");
        tiger.move("Feeding Room");
        tiger.drink();
    }
 
    public void feedWater(Rabbit1 rabbit1) {
        this.bringWater("Feeding Room");
        rabbit1.move("Feeding Room");
        rabbit1.drink();
    }
}
 
public class Test1{
    public static void main(String[] args) {
        Farmer1 farmer1=new Farmer1();
        Tiger1 tiger1=new Tiger1();
        Goat1 goat1=new Goat1();
        Rabbit1 rabbit1=new Rabbit1();
        farmer1.feedWater(tiger1);
        farmer1.feedWater(goat1);
        farmer1.feedWater(rabbit1);
    }
}

手敲了這個例子,發現基礎很重要呀,以前學習的不細致,導致很多地方迷糊不知道為啥那么寫。

(1)一個.java文件中可以定義多個class類,但是只有一個可以定義為public,且這個類名必須和文件名相同

(2)抽象類繼承抽象類,不用覆蓋其抽象方法(原因也很簡單呀,本身他就是抽象的不能實現方法體)。而非抽象類繼承抽象類必須覆蓋抽象方法,非抽象方法非必要。

(3)重寫和重載的區別(高頻面試題)

重載:定義相同的方法名,參數不同。屬于編譯時多態

重寫:子類重寫父類的方法@Override。屬于運行時多態

總結

到此這篇關于Java抽象定義以及舉例的文章就介紹到這了,更多相關Java抽象定義代碼內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_44572962/article/details/115479107

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
主站蜘蛛池模板: 久热这里只有精品99国产6 | 国产第一页在线视频 | 国产欧美精品一区二区三区–老狼 | 色五夜婷婷 | 色久久一个亚洲综合网 | 无人在线视频高清免费观看动漫 | 国内精品91久久久久 | 日本在线观看免费观看完整版 | 2020韩国r级理论片在线观看 | 久久综合狠狠综合狠狠 | 亚洲国产成人久久精品影视 | 青涩体验在线观看未删减 | 婷婷在线成人免费观看搜索 | 操大姨子逼 | 欧美久久天天综合香蕉伊 | 成人免费视屏 | 四虎成人网 | 精品久久久久久国产91 | 精品国产一二三区在线影院 | 高h辣h双处全是肉军婚 | 91桃色视频 | 天海翼三级 | 狠狠干2017| 趴好撅高打屁股sp调教h | 精品一区二区三区高清免费观看 | 久久综合视频网站 | 欧美亚洲国产另类 | 我的男友是消防员在线观看 | 精品亚洲欧美中文字幕在线看 | 欧美一区二区视频 | 免费观看韩剧网站在线观看 | 五月一区二区久久综合天堂 | 青春草视频在线免费观看 | 国产成人综合亚洲一区 | 陈峰姚瑶全集小说无删节 | 免费高清在线视频色yeye | 美女被爆操 | h在线动漫 | 日韩久久精品 | 午夜影院h | 国产亚洲女在线精品 |