1. 程式人生 > >java面向對象第四章

java面向對象第四章

cat code per ext 修飾符 health 不能 基礎知識 類名

一、 接口的基礎知識

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. 1. 二者都不可以實例化
  2. 2. 二者都包含抽象方法,必須被非抽象的子類重寫或實現
  3. 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面向對象第四章