接口
一媳握、接口定義
接口是由常量和抽象方法組成的特殊類碱屁。
接口是對(duì)abstract類的進(jìn)一步擴(kuò)展。
接口中的方法都是未實(shí)現(xiàn)的(類似于抽象方法)蛾找,目的是在實(shí)現(xiàn)接口的類之間建立一種協(xié)議娩脾。
接口中的變量都是常量。
定義:
[public] interface 接口名 [extends 父接口名列表]{
[public][static][final]域類型 域名=常量; //常量域聲明
[public][abstract][native] 返回值 方法名(參數(shù)列表)[throw 異常列表]; //抽象方法聲明
}
接口定義需注意:
1)interface是聲明接口的關(guān)鍵字打毛。
2)聲明接口可給出訪問控制符柿赊。
3)接口名要求符合Java標(biāo)識(shí)符的規(guī)定。
4)接口也有繼承性幻枉,定義一個(gè)接口時(shí)碰声,可以通過extends關(guān)鍵字聲明該接口的是某個(gè)已經(jīng)存在的父類接口的派生接口,它將繼承父接口的所有屬性和方法熬甫。一個(gè)接口還可以繼承多個(gè)父接口胰挑,父接口間用逗號(hào)分隔。
5)系統(tǒng)默認(rèn)接口中所有屬性的修飾都是public static final。
6)系統(tǒng)默認(rèn)接口中所有方法的修飾都是public abstract洽腺。
- 接口名修飾
public: 無任何訪問限制
無修飾: 僅限于本包中
二脚粟、實(shí)現(xiàn)接口
一個(gè)類符合某個(gè)或一組接口,利用implements
聲明格式:
[<修飾符>]class <類名> [extends<超類名>][implements<接口名1>蘸朋,<接口名2>核无,…]
例:transport.java
interface fee {
public void charge();
}
class car implements fee {
public void charge() {
System.out.println("car");
}
}
class bus implements fee {
public void charge() {
System.out.println("bus");
}
}
class transport {
public static void main(String args[]) {
bus a=new bus();
car b=new car();
a.charge();
b.charge();
}
}
例:circle.java
interface theshape{
double pi=3.14;
double getarea();
}
interface shape{
void show();
}
public class circle implements theshape,shape{
int r;
circle(int r){
this.r=r;
}
public double getarea() {
return r*r*pi;
}
public void show() {
System.out.println("r="+r+"\nthe area="+getarea());
}
public static void main(String args[]) {
circle c=new circle(5);
c.show();
}
}
運(yùn)行結(jié)果:
r=5
the area=78.5
內(nèi)部類
在一個(gè)類中定義另一個(gè)類,這個(gè)類就叫做內(nèi)部類或內(nèi)置類藕坯,也稱嵌套類团南,包含內(nèi)部類的類稱為外部類。
- 內(nèi)部類的規(guī)定:
在另一個(gè)類或者一個(gè)接口中聲明類炼彪。
在另一個(gè)接口或者一個(gè)類中聲明接口吐根。
在一個(gè)方法中聲明一個(gè)類。 - 特性:
- 一般用在定義它的類或語句塊之內(nèi)辐马,在外部引用它時(shí)必須給出完整的名稱拷橘,名稱不能與包含它的類名相同。
- 可以使用包含它的外部類的靜態(tài)數(shù)據(jù)成員和實(shí)例數(shù)據(jù)成員喜爷,也可以使用它所在方法的局部變量冗疮。
- 可以聲明為abstract,private檩帐,或protected术幔,若被聲明為static,就變成了頂層類湃密,不能再使用局部變量诅挑。
- 若在內(nèi)部類中聲明任何static成員,則該內(nèi)部類 必須聲明為static.
一泛源、成員類
例:outerone.java
public class outerone {
private int x=3;
innerone ino=new innerone(); //外部類有一個(gè)屬性指向創(chuàng)建的內(nèi)部類對(duì)象
public class innerone{
private int y=5;
public void innermethod(){
System.out.println("y is "+y);
}
public void innermethod2() {
System.out.println("x2 is "+x); //訪問外部類變量
}
}//內(nèi)部類結(jié)束
public void outermethod() {
System.out.println("x is"+x);
ino.innermethod();
ino.innermethod2();
}
public static void main(String args[]) {
outerone my=new outerone();
my.outermethod();
}
}
運(yùn)行結(jié)果:
x is3
y is 5
x2 is 3
二拔妥、靜態(tài)內(nèi)部類
定義為static的內(nèi)部類稱為靜態(tài)內(nèi)部類。靜態(tài)內(nèi)部類將自動(dòng)轉(zhuǎn)化為頂層類 达箍。不能引用外部類成員或其它內(nèi)部類成員没龙。
例:statictest.java
public class statictest {
public static class person {
private int age;
private String name;
static int count=0;
person(String n,int a){
name=n;
age=a;
count++;
}
public void show(){
System.out.println("count="+count+"\t"+name+"\t"+age);
}
}
public static void main(String args[]) {
statictest.person person1=new statictest.person("lili", 18);
person1.show();
statictest.person person2=new statictest.person("limei",10);
person2.show();
}
}
運(yùn)行結(jié)果;
count=1 lili 18
count=2 limei 10
三、局部內(nèi)部類
例:testpart.java
public class testpart {
public static void main(String args[]) {
final int i = 10;
class person {
public String name;
public void show() {
System.out.println(i);
System.out.println(this.name);
}
}
person p = new person();
p.name = "lili";
p.show();
}
}
運(yùn)行結(jié)果:
10
lili
四幻梯、匿名內(nèi)部類
包
一、包的創(chuàng)建
包的創(chuàng)建就是將源程序文件中的接口和類納入指定的包努释。
例:
package graphics;
public class Circle extends Graphic implements Draggable {
. . .
}
利用包成員的規(guī)范名(包名+類名)
graphics.Circle myCir = new graphics.Circle();
引入(import)包成員名
import graphics.Circle;
… …
Circle myCir = new Circle();
引入(import)整個(gè)包成員
import graphics.*;
… …
Circle myCir = new Circle();
例:circlearea.java
public class circlearea {
public static void main(String args[]) {
final float pi=3.14f;
float r=3.6f,area;
area=pi*r*r;
System.out.println("area("+r+")="+area);
}
}
運(yùn)行結(jié)果:
area(3.6)=40.694397