java面向對象第四章
一、 接口的基礎知識
1、為什麽需要接口
為解決實際應用中,單一繼承無法解決的問題
2、什麽是接口
a) 基本概念?
接口是一種特殊的抽象類
接口是一種規範和標準,可以約束類的行為,是一些方法特征集合,但方法沒有方法體
b) 基本語法
訪問修飾符 interface 接口名{
//定義 方法(沒有方法體),方法的訪問修飾符默認為public
//定義 屬性(默認是公共的靜態的常量)
數據類型
}
訪問修飾符只能為public和默認的
c) 註意事項?
1.接口命名,接口字必須和文件名相同
2.接口中的方法沒有方法體
3.接口中的屬性名必須大寫,且要賦值
4.接口不能實例化,沒有構造方法
5.接口支持多重繼承,一個接口可以繼承多個接口,但不能繼承類
6.接口中的方法,必須被所有實現接口的類具體實現
public abstract class Handest { private String brand; //品牌 private String type; //型號 public String getBrand() {父類return brand; } public Handest(String brand,String type) { //有參構造方法 this.brand = brand; this.type=type; } public String getType() { return type; } public abstract void print();public abstract void function(); } 父類
public interface Network { void surf(); //上網 }
//接口2 public interface PlayWiring { void play(); //播放功能 }
//接口3 public interface TakePictures { void takePictures(); //拍照 }
//接口4 public interface VideoCall { void visualTelephone(); //視頻電話 }
public class AptitudeHandset extends Handest implements PlayWiring,Network,TakePictures,VideoCall { public AptitudeHandset(String brand, String type) { super(brand, type); } @Override public void visualTelephone() { System.out.println("開始視頻通話......"); } @Override public void takePictures() { System.out.println("哢嚓......拍照成功"); } @Override public void surf() { System.out.println("已啟動移動網絡......"); } @Override public void play() { System.out.println("開始播放視頻《小時代》......"); } @Override public void print() { System.out.println("這是一款型號為"+super.getType()+"的"+super.getBrand()+"手機:"); } @Override public void function() { System.out.println("發送帶圖片與文字的信息......"); } } 子類子類
public static void main(String [] args){ AptitudeHandset a=new AptitudeHandset("I9100","HTC"); a.print(); a.surf(); a.play(); a.takePictures(); a.function(); a.visualTelephone(); } 測試類測試類
3、一個類如何實現接口
class 類名 implements 接口名{
//必須對接口中的方法,具體實現
}
4、一個類如何繼承另外一個類,且同時實現一個接口【變相的讓1個類實現多重繼承】
class 子類名 extends 父類名 implements 接口1,…接口n{
}
5、接口的好處?
接口體現了約定和實現相分離的原則
彌補了Java類單一繼承的不足,有利於代碼的擴展和維護
6、 抽象類和接口的異同點?【常見筆試題】
相同點
- 1. 二者都不可以實例化
- 2. 二者都包含抽象方法,必須被非抽象的子類重寫或實現
- 3. 二者都可以用來實現多態
不同點:
1、 抽象類只能單一繼承,而接口可以支持多重繼承
2、 抽象類中除抽象方法外,還可以有非抽象的方法;接口中的方法只能是抽象方法
3、 抽象類可以有構造方法,接口沒有
4、 抽象類中的變量可以不賦值,接口中的變量必須賦值
5、 抽象類中可以定義靜態方法,接口不可以
public abstract class Pet { private String name; private int health; private int love; public Pet(String name,int health,int love){ this.name=name; this.health=health; this.love =love; } public String getName() { return name; } public int getHealth() { return health; } public int getLove() { return love; } public abstract void print(); } 父類父類
//接口1 public interface Eatable { void eat(); //吃飯 }
//接口2 public interface FlyingCatchable { void catchingFly(); //接飛盤 }
public class Dog1 extends Pet implements Eatable,FlyingCatchable{ public Dog1(String name, int health, int love) { super(name, health, love); // TODO Auto-generated constructor stub } @Override public void print() { // TODO Auto-generated method stub System.out.println("我叫"+super.getName()+",健康值是:"+super.getHealth()+",與主人的親密度為:"+super.getLove()+"。"); } @Override public void catchingFly() { // TODO Auto-generated method stub System.out.println("我正在和主人玩飛盤!"); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("我正在吃飯!"); } } 子類子類
public class PetText { public static void main(String [] args){ Dog1 d=new Dog1("好好",90 ,95); d.print(); d.eat(); d.catchingFly(); }
二、 面向接口編程
1、接口表示一種能力
2、接口表示一種約定
3、面向接口編程的好處?
a) 實現接口和實現的分離
b) 可以降低代碼間的耦合性
c) 提高程序的可擴展性和可維護性
java面向對象第四章