在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ Java抽象類
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運算符
Java抽象類
Java快速入門
Java實例初始化程序塊
Java靜態(tài)綁定和動態(tài)綁定
Java do-while循環(huán)
Java對象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機(jī)內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點
Java數(shù)組
Java instanceof運算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡單Java程序
Java基礎(chǔ)實例程序
Java對象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java抽象類

在java中用abstract關(guān)鍵字聲明的類稱為抽象類。 它可以有抽象和非抽象方法(帶主體的方法)。

在學(xué)習(xí)java抽象類之前,先來了解java中的抽象。

Java中的抽象

抽象是隱藏實現(xiàn)細(xì)節(jié)并僅向用戶顯示功能的過程。

另一種方式,它只向用戶顯示重要的事情,并隱藏內(nèi)部詳細(xì)信息,例如:發(fā)送短信,只需輸入文本并發(fā)送消息。您也不需要知道有關(guān)郵件傳遞的內(nèi)部處理過程。

抽象可以讓你專注于對象做什么(實現(xiàn)的功能),而不是它如何做。

實現(xiàn)抽象的方法

在java中有兩種實現(xiàn)抽象的方法,它們分別是:

  1. 抽象類(部分)
  2. 接口 (完全)

1. Java中的抽象類

使用 abstract關(guān)鍵字聲明的類被稱為抽象類。需要擴(kuò)展和實現(xiàn)它的方法。 它不能被實例化。

抽象類示例

abstract class A{}

抽象方法

一個被聲明為 abstract 而沒有實現(xiàn)的方法稱為抽象方法。

抽象方法示例

abstract void printStatus();//no body and abstract

具有抽象方法的抽象類的示例

在這個例子中,Bike是一個抽象類,只包含一個抽象方法:run()。 它由 Honda 類提供實現(xiàn)。

abstract class Bike {
    abstract void run();
}

class Honda4 extends Bike {
    void run() {// run 方法的實現(xiàn)
        System.out.println("running safely..");
    }

    public static void main(String args[]) {
        Bike obj = new Honda4();
        obj.run();
    }
}

上面示例中的代碼執(zhí)行結(jié)果如下 -

running safely..

理解抽象類的真實應(yīng)用場景

在這個例子中,Shape是一個抽象類,它的實現(xiàn)分別由RectangleCircle類提供。 大多數(shù)情況下,我們不知道實現(xiàn)類(即對最終用戶隱藏),實現(xiàn)類的對象由工廠方法提供。
工廠方法是用于返回類的實例的方法。 稍后我們將在下一節(jié)中了解和學(xué)習(xí)工廠方法。
在這個例子中,創(chuàng)建Rectangle類的實例,Rectangle類的draw()方法將被調(diào)用。創(chuàng)建一個類文件:TestAbstraction1.java ,它的代碼如下所示 -

abstract class Shape {
    abstract void draw();
}

// In real scenario, implementation is provided by others i.e. unknown by end
// user
class Rectangle extends Shape {
    void draw() {
        System.out.println("drawing rectangle");
    }
}

class Circle1 extends Shape {
    void draw() {
        System.out.println("drawing circle");
    }
}

// In real scenario, method is called by programmer or user
class TestAbstraction1 {
    public static void main(String args[]) {
        Shape s = new Circle1();// In real scenario, object is provided through
                                // method e.g. getShape() method
        s.draw();
    }
}

上面代碼執(zhí)行結(jié)果如下 -

drawing circle

在java中抽象類的另一個例子

創(chuàng)建一個Java文件:TestBank.java,代碼如下所示 -

abstract class Bank {
    abstract int getRateOfInterest();
}

class SBI extends Bank {
    int getRateOfInterest() {
        return 7;
    }
}

class PNB extends Bank {
    int getRateOfInterest() {
        return 8;
    }
}

class TestBank {
    public static void main(String args[]) {
        Bank b;
        b = new SBI();
        System.out.println("Rate of Interest is: " + b.getRateOfInterest() + " %");
        b = new PNB();
        System.out.println("Rate of Interest is: " + b.getRateOfInterest() + " %");
    }
}

上面代碼執(zhí)行結(jié)果如下 -

Rate of Interest is: 7 %
Rate of Interest is: 8 %

具有構(gòu)造函數(shù),數(shù)據(jù)成員,方法等的抽象類

抽象類可以有數(shù)據(jù)成員,抽象方法,方法體,構(gòu)造函數(shù)甚至main()方法。創(chuàng)建一個Java文件:TestAbstraction2.java,代碼如下所示 -

//example of abstract class that have method body  
abstract class Bike {
    Bike() {
        System.out.println("bike is created");
    }

    abstract void run();

    void changeGear() {
        System.out.println("gear changed");
    }
}

class Honda extends Bike {
    void run() {
        System.out.println("running safely..");
    }
}

class TestAbstraction2 {
    public static void main(String args[]) {
        Bike obj = new Honda();
        obj.run();
        obj.changeGear();
    }
}

上面代碼執(zhí)行結(jié)果如下 -

bike is created
running safely..
gear changed

規(guī)則:如果在類中有任何抽象方法,那個類必須聲明為抽象的。

class Bike12{  
    abstract void run();  
}

上面的 Bike12 是無法編譯通過的。

規(guī)則:如果你擴(kuò)展任何具有抽象方法的抽象類,必須提供方法的實現(xiàn)或使這個類抽象化。

抽象類的另一個真實場景

抽象類也可以用于提供接口的一些實現(xiàn)。 在這種情況下,終端用戶可能不會被強(qiáng)制覆蓋接口的所有方法。

注意:如果您是初學(xué)者到Java,請?zhí)^此示例先學(xué)習(xí)接口(interface)。

interface A {
    void a();

    void b();

    void c();

    void d();
}

abstract class B implements A {
    public void c() {
        System.out.println("I am C");
    }
}

class M extends B {
    public void a() {
        System.out.println("I am a");
    }

    public void b() {
        System.out.println("I am b");
    }

    public void d() {
        System.out.println("I am d");
    }
}

class Test5 {
    public static void main(String args[]) {
        A a = new M();
        a.a();
        a.b();
        a.c();
        a.d();
    }
}

上面代碼執(zhí)行結(jié)果如下 -

I am a
I am b
I am c
I am d

上一篇:Java運算符下一篇:Java對象和類