1. 程式人生 > >4.3抽象類abstract和介面interface定義implements實現介面中的抽象方法

4.3抽象類abstract和介面interface定義implements實現介面中的抽象方法

定義一個類時,常常需要定義一些方法描述類的行為特徵,這些方法的實現方式是無法確定的。Java允許在定義方法時不寫方法體,不包含方法體的方法為抽象方法,抽象方法用abstract修飾
格式:

abstract void shout( );  //定義抽象方法shout
//定義抽象類animal
abstract class animal
{
    //定義抽象方法shout()
    abstract int shout();//不包含方法體的抽象方法

}

包含方法體的類必須宣告為抽象類,但抽象類可以不包含任何抽象方法
抽象類是不可以被例項化的,抽象類中有可能包含抽象方法,抽象方法是沒有方法體的,不可以被呼叫。
如何實現抽象類中的抽象方法

abstract class animal
{
    //定義抽象方法shout
    abstract void shout();
}

class Dog extends animal
{
    //實現抽象方法
    void shout()
    {
        System.out.println("旺旺~");
    }
}

public class Example10
{
    public static void main(String []args)
    {
        Dog p = new Dog();
        p.shout();
    }
}

4.3.2介面
如果抽象類中所有方法都是抽象的,那麼可以將這個類用另外另外一種方式來定義,介面

interface animal
{
    int ID = 1;//定義全域性常量
    void breathe();//定義抽象方法
    void run();
}

介面中定義的方法和變數都包含一些預設修飾符。介面中定義的方法預設使用public abstract來修飾,即抽象方法,介面中的變數用public static final修飾,這個值是不能改變的,是一個全域性常量。
呼叫介面中的方法:
因為介面中的都是抽象方法,所以不能通過例項化物件直接呼叫介面中的方法,這時需要定義一個類,並使用implement實現介面中的抽象方法。

//定義animal介面
interface animal
{
    int ID = 1 ; 
    void breathe();
    void run();
}
//dog類實現animal介面,
class Dog implements animal
{
    //實現breathe的方法
    public void breathe()
    {
        System.out.println("狗在呼吸");
    }
    //實現run方法
    public void run()
    {
        System.out.println("狗在跑");
    }
}

public class Example11
{
    public static void main(String []args)
    {
        Dog dog = new Dog();//建立一個dog例項化物件
        dog.breathe();//呼叫dog類中的breathe方法
        dog.run();
    }
}

介面之間的繼承關係

//定義animal介面
interface animal
{
    int ID = 1 ; 
    void breathe();
    void run();
}
//定義LanfdAnimal介面並繼承animal介面
interface LandAnimal extends animal
{
    void lijia();//定義抽象方法
}
//定義dog實現LandAnimal介面,使用implements實現介面
class Dog implements LandAnimal
{
    public void breathe()
    {
        System.out.println("狗在呼吸");
    }//實現breathe的方法
    public void run()
    {
        System.out.println("狗在跑");
    }//實現run方法
    public void lijia()
    {
        System.out.println("狗生活在陸地上");
    }//實現lijia方法
}

public class Example11
{
    public static void main(String []args)
    {
        Dog dog = new Dog();//建立一個例項物件
        dog.breathe();//呼叫breathe方法
        dog.run();//呼叫run方法
        dog.lijia();//呼叫lijia方法
    }
}

1、介面的方法都是抽象的,不能例項化物件
2、當一個類實現介面時,如果這個類是抽象類,則實現介面中的部分方法就可以,否則,實現介面中的所有方法
這句具體我也不明白······
3、一個類通過implements關鍵字實現介面時,可以實現多個介面,被實現的多個介面要用,隔開
格式如下:

interface Run
{
    //程式程式碼
}
interface Fly
{
    //程式程式碼
}
class Bird implements Run,Fly
{
//  程式程式碼
}

4、一個介面可以通過extends關鍵字繼承多個介面,介面之間用,隔開。

interface Running
{
    //程式程式碼
}
interface Flying 
{
    //程式程式碼
}
interface Eating extends Running,Flying
{
    //程式程式碼
}

5、一個類在繼承另一個類的時候同時還可以實現介面,此時,extends關鍵字位於implements關鍵字之間
class Dog extends canidae implements animal//先繼承,再實現
{
程式程式碼
}