具體實(shí)現(xiàn)是在類(lèi)實(shí)現(xiàn)接口的時(shí)候由類(lèi)來(lái)實(shí)現(xiàn)的,接口中只是包含方法的定義,在類(lèi)中要把需要實(shí)現(xiàn)的接口的所有方法都實(shí)現(xiàn)。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、虛擬空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、德惠網(wǎng)站維護(hù)、網(wǎng)站推廣。
如:
interface IMyInterface
{
void func();//在接口中只是聲明,沒(méi)有實(shí)現(xiàn),也就是沒(méi)有代碼
}
在類(lèi)中要有這樣的方法:
void func()
{
//DoSomething 這個(gè)就是具體實(shí)現(xiàn)
}
抽象類(lèi)就是用來(lái)做基類(lèi)的,他的派生類(lèi)實(shí)現(xiàn)抽象類(lèi)的方法,這個(gè)和接口類(lèi)似,但是抽象類(lèi)只能單繼承,而接口可以多繼承。
接口只是聲明的東西,實(shí)際并不分配內(nèi)存,當(dāng)在類(lèi)中實(shí)現(xiàn)了接口定義的方法后才真正編譯,占用內(nèi)存。
public interface Parent(){
public void simpleCall();
}
public class Child_A implements Parent{
public void simpleCall(){
System.out.println("a---simpleCall");
}
}
public class Child_B implements Parent{
public void simpleCall(){
System.out.println("b---simpleCall");
}
}
child_a和child_b中的simpleCall可以實(shí)現(xiàn)不同的功能。。。多態(tài),簡(jiǎn)單說(shuō)其實(shí)就是一種功能的多種實(shí)現(xiàn)方式?;蛘呃斫鉃槎喾N形態(tài)。
方法的實(shí)現(xiàn)是指可以在{}中寫(xiě)具體的Java代碼,接口只能是以()結(jié)尾,
public
void
tree();//方法的定義
//方法的具體實(shí)現(xiàn)
public
void
tree(){
system.out.println("這是一顆松樹(shù)");
}
舉個(gè)面積的例子:在java中,定義一個(gè)接口,聲明計(jì)算長(zhǎng)方形面積和周長(zhǎng)的抽象方法,再用一個(gè)類(lèi)去實(shí)現(xiàn)這個(gè)接口,再編寫(xiě)一個(gè)測(cè)試類(lèi)去使用這個(gè)接口。首先,接口必須單獨(dú)存放,如果我們用eclipse編程的話,它們提示:The public type **** must be defined in its own file,意思是必須要定義在其自己的文件中,所以要為接口文件單獨(dú)存放起來(lái),舉例,我們的接口要實(shí)現(xiàn)獲到矩形的長(zhǎng),寬,面積,周長(zhǎng),所以定義以下的接口。public interface calrect {\x0d\x0apublic abstract int calarea();\x0d\x0apublic abstract int calgirth();\x0d\x0apublic abstract int getx();\x0d\x0apublic abstract int gety();\x0d\x0a}注意,定義接口就像定義類(lèi)一樣,接口的訪問(wèn)控制符只能用public,用public定義的接口可以被所有的類(lèi)和包引用,而缺省的則只能被同一個(gè)包中的其他類(lèi)和接口引用,這符合JAVA中訪問(wèn)控制符的一般要求,關(guān)于接口再引用其他接口則是后話。以上接口文件名為calrect.java.另外需要指出的是接口中不能給方法給出方法體。接下來(lái),需要定義一個(gè)類(lèi)來(lái)實(shí)現(xiàn)接口,因?yàn)椴恢繨AVA的內(nèi)置矩形類(lèi)是什么名,所以為了安全,將該類(lèi)定義為RRect,這可以認(rèn)為是一種安全策略。關(guān)于implements,可以參考其他資料。該類(lèi)引用了接口calrect,所以必須對(duì)calrect中的方法一一實(shí)現(xiàn)。//定義矩形類(lèi) 應(yīng)用接口class RRect implements calrect{private int x;\x0d\x0aprivate int y;public RRect (){\x0d\x0a x=3;y=4;\x0d\x0a}\x0d\x0apublic int calarea(){\x0d\x0a return x*y;\x0d\x0a}\x0d\x0apublic int calgirth(){\x0d\x0a return x*2+y*2;\x0d\x0a}\x0d\x0apublic int getx(){\x0d\x0a return x;\x0d\x0a}\x0d\x0apublic int gety(){\x0d\x0a return y;\x0d\x0a}\x0d\x0a}//接下來(lái),定義一個(gè)測(cè)試類(lèi),所謂測(cè)試類(lèi),我理解為定義一個(gè)類(lèi),在其定義類(lèi)RRect的對(duì)象,并驗(yàn)證其中的方法,看看是不是可以正常使用//定義Class1類(lèi)\x0d\x0apublic class Class1{\x0d\x0aRRect rect;\x0d\x0apublic static void main(String []args){\x0d\x0a RRect rect=new RRect();\x0d\x0a System.out.println("矩陣的長(zhǎng)"+ rect.getx());\x0d\x0a System.out.println("矩陣的寬"+ rect.calarea());\x0d\x0a System.out.println("矩陣的面積"+ rect.calarea());\x0d\x0a System.out.println("矩形的周長(zhǎng) "+rect.calgirth());\x0d\x0a}\x0d\x0a\x0d\x0a}運(yùn)行結(jié)果:矩陣的長(zhǎng)3\x0d\x0a矩陣的寬12\x0d\x0a矩陣的面積12\x0d\x0a矩形的周長(zhǎng) 14注:接口單存放,接口實(shí)現(xiàn)類(lèi)和測(cè)試類(lèi)可以存放在一個(gè)文件中
interface iShape2D //定義接口??
{
final double pi=3.14;
abstract void area();
}
class CRectangle implements iShape2D // 實(shí)現(xiàn)CRectangle類(lèi)
{
int width,height;
public CRectangle(int w,int h){
width=w;
height=h;
}
public void area(){ // 定義area()的處理方式
System.out.println("area="+width*height);
}
}
class CCircle implements iShape2D // 實(shí)現(xiàn)CCircle類(lèi)
{
double radius;
public CCircle(double r){
radius=r;
}
public void area(){ // 定義area()的處理方式
System.out.println("area="+pi*radius*radius);
}
}
public class app10_4
{
public static void main(String args[])
{
CRectangle rect=new CRectangle(5,10);
rect.area(); //調(diào)用CRectangle類(lèi)里的area() method
CCircle cir=new CCircle(2.0);
cir.area(); // 調(diào)用CCircl類(lèi)里的area() method
}
}
// app10_5,通過(guò)接口類(lèi)型的變量來(lái)訪問(wèn)對(duì)象
class app10_5
{
public static void main(String args[])
{
iShape2D var1,var2; // ?派?明接口類(lèi)型的變量
var1=new CRectangle(5,10); // 將接口類(lèi)型的變量var1指向新建的對(duì)象
var1.area(); // 通過(guò)接口var1調(diào)用show() method
var2=new CCircle(2.0); // 將接口類(lèi)型的變量var2指向新建的對(duì)象
var2.area(); // 通過(guò)接口var2調(diào)用show() method
}
}
// app10_6, 實(shí)現(xiàn)兩個(gè)以上的接口??
interface iShape2D // 定義iShape2D接口
{
final double pi=3.14;
abstract void area();
}
interface iColor // 定義iColor接口
{
abstract void setColor(String str);
}
class CCircle implements iShape2D,iColor // 實(shí)現(xiàn)iShape2D與iColor接口
{
double radius;
String color;
public CCircle(double r){
radius=r;
}
public void setColor(String str){ // 定義iColor接口里的setColor()
color=str;
System.out.println("color="+color);
}
public void area(){ // 定義iShape2D接口里的area() method
System.out.println("area="+pi*radius*radius);
}
}
public class app10_6
{
public static void main(String args[])
{
CCircle cir;
cir=new CCircle(2.0);
cir.setColor("Blue"); // 調(diào)用CCircl類(lèi)里的setColor() method
cir.area(); // 調(diào)用CCircl類(lèi)里的show() method
}
}
首先,需要了解一下java關(guān)于類(lèi)繼承和接口實(shí)現(xiàn)的基礎(chǔ)理論知識(shí),如下:
類(lèi)繼承:繼承是面向?qū)ο笞铒@著的一個(gè)特性。繼承是從已有的類(lèi)中派生出新的類(lèi),新的類(lèi)能吸收已有類(lèi)的數(shù)據(jù)屬性和行為,并能擴(kuò)展新的能力。Java繼承是使用已存在的類(lèi)的定義作為基礎(chǔ)建立新類(lèi)的技術(shù),新類(lèi)的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類(lèi)的功能,但不能選擇性地繼承父類(lèi)。
接口實(shí)現(xiàn):接口實(shí)現(xiàn)在java中是一種特殊繼承方式,接口在定義后,就可以在類(lèi)中實(shí)現(xiàn)該接口。在類(lèi)中實(shí)現(xiàn)接口可以使用關(guān)鍵字implements,其基本格式如下:
[修飾符] class 類(lèi)名 [implements 接口列表]{
}
然后,需要?jiǎng)?chuàng)建父類(lèi)和定義接口,如下:
創(chuàng)建父類(lèi):
class?Bird?{
int?legnum?=?2;
void?egg()?{
};
}
定義接口:
interface?Flyanimal{?????
void?fly();??
}
最后,可以創(chuàng)建一個(gè)類(lèi)來(lái)繼承上面的父類(lèi)和實(shí)現(xiàn)上面的接口,如下:
class?Pigeon??extends?Bird?implements??Flyanimal?{??
public?void?fly(){??
System.out.println("pigeon??can?fly");??
}??
public?void?egg(){??
System.out.println("pigeon??can?lay??eggs?");??
}??
}