1. 程式人生 > >JavaSE之面向物件程式設計—抽象類與介面—— 3(介面的定義與使用)

JavaSE之面向物件程式設計—抽象類與介面—— 3(介面的定義與使用)

                                                                                        介面的定義與使用


抽象類和普通類相比最大的特調就是抽象類裡面含有抽象方法(也可以不含),但是普通類中一定不會有抽象方法。抽象類的實現必須通過子類才可以例項化,但是對於抽象類是侷限的,它只能單繼承。介面,在java開發中非常的重要,它可以和我們的抽象類結合使用。
介面的定義:介面就是抽象方法和全域性常量的集合。定義介面的關鍵字是interface。
注意:我們在java程式設計中優先選擇介面進行程式設計。

// //定義一個簡單的介面
// interface Message{
	// public static final String MSG = "I am a Student";//在介面中定義變數必須用static、fainal關鍵字修飾,當用它們修飾以後就成了全域性常量了。
	// public abstract void print();//抽象方法
// }
// //實現介面
 // class News implements Message{
	// public void print(){
		// System.out.println("這是子類實現介面中的方法");
	// }
	// public String getNews(){
		// return Message.MSG;//這個是父介面的常量,所以可以直接通過類名訪問
	// }
// }
// public class Jiekou {
	// public static void main(String[] args){
	// Message message=new News();//父介面要想實現例項化只能通過子類——》向上轉型
	// message.print();//被子類覆寫後的方法
	// News n=(News)message;
// System.out.println(n.getNews());	
	
	// }
// }
//通過上面的程式碼我們可以看到我們的介面和實現它的子類之間的關係和我們的子類和父類相似的,父介面和父類
//都是依靠子類去實現的。


//2.介面使用許可權
//我們知道在繼承關係中也有許可權的限制,在介面中同樣也有,並且我們的介面中還沒有繼承中
//那麼複雜,在介面中不管是屬性還是方法都只能使用public許可權,並且需要他被注意的是:
//在類中如果我們不寫許可權修飾符,那麼這個類的許可權是預設許可權,但是在我們的介面中如果我們
//沒有使用許可權修飾符,那麼我們的許可權將預設為public。


// //(1)當一個子類即需要實現介面又需要繼承抽象類時,先繼承後實現——》extends->implements
// //子類繼承抽象類和實現介面
// interface Message{
	// public void print();//在抽象類中的方法不需要用abstract修飾
// }
// abstract class News{
	// public abstract void getNews();
// }
// //下面這個子類即實現抽象方法又實現了介面
// class MN extends News implements Message{
	// public void print(){
		// System.out.println("這是子類實現介面中的方法");
	// }
	// public void getNews(){
		// System.out.println("這是子類實現抽象類的方法");
	// }
	// public void getPrint(){
		// System.out.println("這是子類中自己的方法");
	// }
// }
// public class Jiekou{
	// public static void main(String[] args){
		// Message message=new MN();//實現向上轉型
		// News news=(News)message;//由於MN這個類即實現了介面又繼承了抽象類,所以讓兩個毫無關係的Message和News聯絡起來,可以通過強轉來實現;
		                          //因為對於New news也可以是new MN();這才是關鍵點
		// message.print();
		// news.getNews();
		// System.out.println("-------------");
		// MN mn = (MN)message;//由於這個message在編譯的時候編譯器無法知道它到底是什麼型別,編譯器只按照修飾它的那個型別類編譯,所以時大型別轉小型別,需要強轉。
		// mn.getPrint();
	// }
// }

// //(2)一個抽象類可以使用implements實現多個介面,但是介面不能繼承抽象類。
// //抽象類實現介面
// interface Message{
	// public void print();//在抽象類中的方法不需要用abstract修飾
// }
// abstract class News implements Message{//抽象類中可以放抽象方法,所以我們不需要實現抽象方法
	// public abstract void getNews();
// }
// class MN extends News {
	// public void print(){
		// System.out.println("這是子類父類中實現介面的方法");
	// }
	// public void getNews(){
		// System.out.println("這是子類實現抽象類的方法");
	// }
	// public void getPrint(){
		// System.out.println("這是子類中自己的方法");
	// }
// }
// public class Jiekou{
	// public static void main(String[] args){
		// Message message=new MN();//實現向上轉型
		// News news=(News)message;//由於MN這個類即實現了介面又繼承了抽象類,所以讓兩個毫無關係的Message和News聯絡起來,可以通過強轉來實現;
		                         // //因為對於New news也可以是new MN();這才是關鍵點
		// message.print();
		// news.getNews();
		// System.out.println("-------------");
		// MN mn = (MN)message;//由於這個message在編譯的時候編譯器無法知道它到底是什麼型別,編譯器只按照修飾它的那個型別類編譯,所以時大型別轉小型別,需要強轉。
		// mn.getPrint();
	// }
// }


// //(3)一個介面可以使用extends繼承多個父介面。
 // interface A{
	 // public void printA();
 // }
 // interface B{
	 // public void printB();
 // }
 // interface C implements A,B{//注意:在介面實現的時候,我們只需要一個關鍵字implements,多個介面之間用逗號隔開
	 // public void printA(){
		 // System.out.println("這是介面A中的方法");
	 // }
	 // public void printB(){
		 // System.out.println("這是介面B的方法");
	 // }
	 // public void printC(){
		 // System.out.println("這是C自己的方法");
	 // }
 // }

// //用static修飾內部介面(它的使用方法和靜態內部類是一樣的,在使用的時候它的名字是外部介面.內部介面)
// interface A{
	// public void printA();
	// static interface B{
		// public void printB();
	// }
// }
// class Imp implements A.B{//實現靜態內部類介面
	// public void printB(){
		// System.out.println("這是靜態內部介面的方法");
	// }
// }
// public class Jiekou{
	// public static void main(String[] args){
		// Imp imp=new Imp();
		// imp.printB();
	// }
// }

// //3.介面的應用
// //停車場——》車《————公交車、大卡車、摩托車、小轎車
// //在積極而口中我們一般只定義方法,在這個例子中我們定義了獲得長、寬的方法
// //在類中我們定義了一個方法進行計算是否可以停下
// //這樣的好處是,它們之間可以同時使用。
// interface Car{
	// public int getLength();
	// public int getWidth();
// }
// class Parking{
	// int standLength=4;//標準的長
	// int standWidth=2;//標準的寬
	// public void Compare(int length,int width){
		// if((length<=standLength)&&(width<=standWidth)){
			// System.out.println("可以停下");
		// }else{
			// System.out.println("停不下");
		// }
	// }
	
// }
// class Bus extends Parking implements Car{
	// public int getLength(){
		 // return 6;
	// }
	// public int getWidth(){
		// return 4;
	// }
// }

// class Auto extends Parking implements Car{
	// public int getLength(){
		 // return 5;
	// }
	// public int getWidth(){
		// return 3;
	// }
// }

// class Motory extends Parking implements Car{
	// public int getLength(){
		 // return 2;
	// }
	// public int getWidth(){
		// return 1;
	// }
// }

// class SCar extends Parking implements Car{
	// public int getLength(){
		 // return 5;
	// }
	// public int getWidth(){
		// return 3;
	// }
// }
// public class Jiekou{
	// public static void main(String[] argd){
		// //例項化物件
		// Bus bus=new Bus();
		// int length=bus.getLength();
		// int width=bus.getWidth();
		// bus.Compare(length,width);
		
		// Auto auto=new Auto();
		 // length=auto.getLength();
		 // width=auto.getWidth();
		// auto.Compare(length,width);
		
		// Motory motory=new Motory();
		 // length=motory.getLength();
		 // width=motory.getWidth();
		// motory.Compare(length,width);

		
		// SCar scar=new SCar();
		 // length=scar.getLength();
		 // width=scar.getWidth();
		// scar.Compare(length,width);


	// }
// }