java介面、類

來源:互聯網
上載者:User

標籤:java 介面 類


介面:


[修飾符] interface 介面名 [extends 父介面名1,父介面名2,...]{

[public] [static] [final] 類型 變數;
[public] [abstract] 方法; 


}


修飾符,選擇性參數,用於指定介面的存取權限,可選值為public。如果省略則使用預設的存取權限。
介面名,必選參數,用於指定介面的名稱,介面名必須是合法的java標示符。一般首字母大寫。
extends父介面名列表,選擇性參數,用於指定要定義的介面繼承於哪個父介面。當使用extends關鍵字時,父介面名為必選參數。
方法,介面中的方法只有定義而沒有被實現。


eg:
public interface Calculate{

float pi = 3.14;
float getArea(float r);
}


等價於:


public interface Calculate{

public fianl float pi = 3.14;
public abstract float getArea(float r);
}


介面的實現:


[修飾符]class 類名 [extends 父類名] [implements 介面列表]{

}


修飾符,選擇性參數,用於指定類的存取權限,可選值為public、abstract、final。
類名,必選參數,用於指定類的名稱,類名必須是合法的java標示符。一般情況下,首字母大寫。
extends 父類名,選擇性參數,用於指定要定義的類繼承於哪個父類。當使用extends關鍵字時,父類名為必選參數。
implements 介面列表,選擇性參數,用於指定該類實現的是哪些介面。當使用implements關鍵字時,介面列表為必選參數。當介面列表中存在多個介面名時,各個介面名之間使用逗號分隔。


eg:
public interface Calculate{

float pi = 3.14;
float getArea(float r);
}


public class Circle implements Calculate{

public float getArea(float r){


return pi * r * r;
}
}


繼承的實現:
[修飾符] class 子類名 extends 父類名{



}
修飾符,選擇性參數,用於指定類的存取權限,可選值為public、abstract、final。
子類名,必選參數,用於指定子類的名稱,類名稱必須是合法的java標示符。一般情況下,首字母大寫。
extends 父類名,必選參數,用於指定要定義的子類繼承於哪個父類。


eg:
public class Bird{

protected String color;
protected String skin;


}


public class extends Bird{

public void fly(){




}
}


抽象類別:
abstract class 類名{



}


eg:
public abstract class Fruit{
protected String color;


public Fruit(){
color = "green";
}




}


抽象方法(不能使用private或static關鍵字修飾,因為要在子類中重寫,不能用類名直接調用方法)
abstact <方法返回值類型> 方法名(參數列表);


eg:
public abstract class Fruit{
protected String color;


public Fruit(){
color = "green";
}


public abstract void harvest();


}


成員內部類(內部類只能在外部類中使用,一般作為外部類的成員變數,內部類的執行個體化操作必須在外部類或外部類中的非靜態方法中;內部類可以訪問外部類成員)
public class OuterClass{

private class InnerClass{


}
}


eg:
public class OuterClass{

private int i = 0;
private void g(){







private InnerClass{


void f(){


g();
i++;
}
}


}


局部內部類(在類的方法中定義的類,他得作用範圍也是在這個方法體內)


eg:
public class SellOutClass{

private String name;


public SellOutClass(){


name = "apple";
}


public void sell(double price){


class Apple{


double price;
public Apple(double price){


this.price = price;
}


public void price(){


System.out.println("現在開始賣" + name);
System.out.println("單價為:" + price);
}


}


Apple a = new Apple(price);
a.price();


}
}


匿名內部類(匿名內部類也就是沒有名字的內部類,正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫;但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面)


eg1:不使用匿名內部類來實現抽象方法


public abstract class Person {
    public abstract void eat();
}
 
public class Child extends Person {
    public void eat() {
        System.out.println("eat something");
    }
}
 
public class Test {
    public static void main(String[] args) {
        Person p = new Child();
        p.eat();
    }
}
運行結果:eat something


可以看到,我們用Child繼承了Person類,然後實現了Child的一個執行個體,將其向上轉型為Person類的引用.但是,如果Child類只使用一次,那麼將其編寫為獨立的一個類有些浪費。這個時候就引入了匿名內部類。


 
eg2:匿名內部類的基本實現


public abstract class Person {
    public abstract void eat();
}
 
public class Test {
    public static void main(String[] args) {


        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };


        p.eat();
    }
}
運行結果:eat something


可以看到,我們直接將抽象類別Person中的方法在大括弧中實現了,這樣便可以省略一個類的書寫;並且,匿名內部類還能用於介面上。


eg3:在介面上使用匿名內部類
public interface Person {


    public abstract void eat();
}
 
public class Test {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}
運行結果:eat something


由上面的例子可以看出,只要一個類是抽象的或是一個介面,那麼其子類中的方法都可以使用匿名內部類來實現;當然一般類的子類也可以使用匿名內部類來實現。


最常用的情況就是在多線程的實現上,因為要實現多線程必須繼承Thread類或是繼承Runnable介面。


eg4:Thread類的匿名內部類實現
public class Test {
    public static void main(String[] args) {
        Thread t = new Thread() {
            public void run() {
                for (int i = 1; i <= 3; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        t.start();
    }
}
運行結果:1 2 3 


eg5:Runnable介面的匿名內部類實現


public class Test {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                for (int i = 1; i <= 3; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}
運行結果:1 2 3 




































































著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java介面、類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.