日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习笔记004——接口、克隆、回调、内部类

發(fā)布時間:2024/7/19 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记004——接口、克隆、回调、内部类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

接口

1、接口不是類,而是對類的一組需求描述,這些類要遵從接口描述的統(tǒng)一格式進行定義

2、定義接口,如:

public interface Abc{

int aaa(Object other)

}

3、接口中的所有方法自動地屬于public,聲明在接口中的內部類自動成為staticpublic

4、接口不能含有實例域,也不能在接口中實現(xiàn)方法,提供實例域和方法實現(xiàn)的任務應該由實現(xiàn)接口的那個類完成

5、為了讓類實現(xiàn)一個接口,需要如下兩個步驟:

① 將類聲明為實現(xiàn)給定的接口,需要使用implements關鍵字,如:class Employee implements Compable

② 對接口中的所有方法進行定義

6、在接口聲明中的方法不需要聲明為public,但在實現(xiàn)接口時必須把方法聲明為public,否則編譯器會發(fā)出警告

7、如果存在一種通用算法,它能夠對兩個不同的子類對象進行比較,在應該在超類中提供一個compareTo方法,并將這個方法聲明為final

8、接口的特性

① 接口不是類,不能使用new運算符實例化一個接口,但能夠聲明接口的變量,如:Comparable x;

② 接口變量必須引用實現(xiàn)了接口的類對象:x = new Employee(...)

③ 可以使用instanceof檢查一個對象是否實現(xiàn)了某個特定的接口,如:if(anObject instanceof Comparable){...}

④ 接口可以被擴展,如:有一個成為Moveable的接口:

public interface Moveable{

void move(double x, double y);

}? //然后可以以它為基礎擴展一個叫做Powered的接口:

public interface Powered entends Moveable{

public milesPerGallon();

}

⑤ 在接口中不能包含實例域或靜態(tài)方法,但卻可以包含常量,如:

public interface Powered entends Moveable{

double milesPerGallon();

double SPEED_LIMIT = 95;

}? //類中的域將被自動設定為public static final

——有些程序員為了提高清晰度的考慮,將接口方法標記為public,將域標記為public static final,雖然這在Java中是允許的,但Java語言規(guī)范卻建議不要書寫這些多余的關鍵字

⑥ 實現(xiàn)多個接口,如:class Employee implements Clonealbe, Comparable,使用逗號將實現(xiàn)的對個接口隔開

克隆

1、clone方法是Object類的一個proteced方法,該方法只能實現(xiàn)淺拷貝,若淺拷貝對象共享的子對象是不可變的,那就不會出現(xiàn)什么問題,但如果需要拷貝的對象里有可變的子對象,那就需要編寫該類自己的clone方法

2、一個類需要實現(xiàn)了Cloneable接口才能實現(xiàn)克隆操作,否則編譯不通過,可以使用if(obj instanceof Cloneable)...來檢查是否實現(xiàn)了該接口,該接口用來表明這個類需要擁有克隆的能力

3、即使clone的默認實現(xiàn)(淺拷貝)能夠滿足需求,也應該實現(xiàn)Cloneable接口,將clone重定義為public,并調用super.clone(),如:

class Employee implements Cloneable{

public Employee clone() throws CloneNotSupportedException{

Employee cloned = (Employee)super.clone();

}

}

4、建立深拷貝clone方法的示例:

class Employee implements Cloneable{

public Employee clone() throws CloneNotSupportedException{

Employee cloned = (Employee)super.clone();

cloned.hireDay = (Date)hireDay.clone();

return cloned;

}

}

回調

1、回調是一種程序設計模式,在這種模式中可以指出某個特定事件發(fā)生時應該采取的動作

2、java.swing包中有一個Timer類可以使用它在到達個頂?shù)臅r間間隔時發(fā)出通告,需要設置一個時間間隔,將某一個類的對象傳遞給定時器可以設置定時器定時進行的操作,這要求傳遞的對象所屬的類實現(xiàn)了java.awt.event包的ActionListener接口,該接口如下:

public interface ActionListener{

void actionPerformed(ActionEvent event);

}? //當?shù)竭_指定的時間間隔時,定時器就調用actionPerformed方法

3、回調的示例:

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

public class TimerTest{

public static void main(String[] args){

ActionListener listener = new TimePrinter();

Timer t = new Timer(1000, listener);

t.start();

JOptionPane.showMessageDialog(null, "quit program?");

System.exit(0);

}

}

class TimePrinter implements ActionListener{

public void actionPerformed(ActionEvent event){

Date now = new Date();

System.out.println("At the time is " + now);

}

}

內部類

1、內部類是定義在另一個類中的類,使用內部類的主要原因有:

① 內部類方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有的數(shù)據(jù)

② 內部類可以對同一個包中的其他類隱藏起來

③ 當先要定義一個回調函數(shù)且不想編寫大量代碼時,使用匿名內部類比較便捷

2、內部類既可以訪問自身的數(shù)據(jù)域,也可以訪問創(chuàng)建它的外圍類對象的數(shù)據(jù)域

3、若在A類中定義了內部類B,則只有A類的方法才能夠生成B對象,只有內部類是私有類,而常規(guī)類只可以具有包可見性或者公有可見性

4、表達式OuterClass.this表示外圍類引用,如A類是外圍類,在內部類B里要使用A類的成員變量可以這樣:A.this.xxx,可以使用下列語法格式來編寫內部對象的構造器:outerObject.new InnerClass(構造方法變量列表),如this.new B();這里的this限定詞是多余的,不過可以通過顯式地命名將外圍類引用設置為其他的對象,如果B是A的內部類,對于任意的A對象都可以構造一個B對象:

A abc0 = new A();

A.B abc1 = abc0.new B();

5、局部內部類

即在一個方法中定義的類,局部類不能用public或private進行聲明,它的作用域被限定在聲明這個局部類的塊中,其優(yōu)點有:

① 可以對外部世界外圈地隱蔽起來

② 它不僅可以訪問包含它們的外部類,還可以訪問被聲明為final的局部變量

final關鍵字可以應用于局部變量、實例變量和靜態(tài)變量中,在所有這些情況下,它們的含義都是:在創(chuàng)建這個變量后,只能夠為之賦值一次,此后,再也不能修改它的值了,在定義final變量的時候,不必進行初始化

6、匿名內部類

① 假如只創(chuàng)建某個類的一個對象,就不必命名了,這種類叫做匿名內部類,如:

public void start(int interval, final boolean beep){

ActionListener listener = new ActionListener(){

public void actionPerformed(ActionEvent event){

Date now = new Date();

System.out.println("At the tone, the time is " + now);

if(beep) Toolkit.getDefaultToolkit().beep();

}

};

Timer t = new Timer(interval, listener);

t.start();

}? //創(chuàng)建一個實現(xiàn)ActionListener接口的新對象,需要實現(xiàn)的方法actionPerformed定義在括號{}內

② 用于構造對象的任何參數(shù)都要被放在超類/接口/類名后面的括號()內,通常的語法格式是:

new SuperType(構造方法變量列表){

inner class methods and data

}

③ 由于匿名類沒有類名,所以匿名類不能有構造器,取而代之的是將構造器參數(shù)傳遞給超類構造器,尤其是在內部類實現(xiàn)接口的時候不能有任何構造參數(shù),還要加上一組(),如果構造參數(shù)的閉圓括號后跟一個花括號,則表示定義的是匿名內部類

7、靜態(tài)內部類

① 有時候,使用內部類只是為了把一個類隱藏在另外一個類的內部,并不需要內部類引用外圍類對象,為此可以將內部類聲明為static,以便取消產(chǎn)生的引用

② 只有內部類可以聲明為static,靜態(tài)內部類的對象除了沒有對生成它的外圍類對象的引用特權外,與其他所有內部類完全一樣

③ 注:在內部類不需要訪問外圍類對象的時候,應該使用靜態(tài)內部類;聲明在接口中的內部類自動成為publicstatic

轉載于:https://www.cnblogs.com/oushihua/archive/2013/02/26/2933653.html

總結

以上是生活随笔為你收集整理的Java学习笔记004——接口、克隆、回调、内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。