java基础---接口(二)

1.为什么使用接口

防盗门可以继承门的同时又继承锁吗?不可以

如何解决这个问题,接口

2.什么是接口

语法

public interface MyInterface {

public void foo()

//其他方法

}

3.接口特性

1.接口丌可以被实例化

2.实现类必须实现接口的所有方法

3.实现类可以实现多个接口

4.接口中的变量都是静态常量

5.接口中的方法都是抽象方法

 

Java单继承多实现

4.如何使用接口

Java接口来实现

1.根据需求设计方法

2.实现所有方法

3.用多态的方式使用

 

编码实现

举例:

public interface Usb {

//接口中的方法必须是抽象方法

public void service();

}

 

public class Usbfan implements Usb {

@Override

public void service() {

// TODO Auto-generated method stub

System.out.println("风扇实现USB接口");

}

}

public class UsbMouse implements Usb {

@Override

public void service() {

// TODO Auto-generated method stub

System.out.println("鼠标实现Usb接口");

}

}

 

public class Test {

public static void main(String[] args) {

Usbfan uf=new Usbfan();

uf.service();

UsbMouse um=new UsbMouse();

um.service();

//多态实现

Usb um1=new  Usbfan();

um1.service();

}

}

5.接口表示一种能力

关心实现类有何能力,而不关心实现细节

面向接口的约定而不考虑接口的具体实现

练习

package Demo1;

public abstract class Door {

//开门

public  abstract void open();

//关门

public  abstract void close();

}

 

package Demo1;

public interface Lock {

  //开锁

public void openLock ();

 //关锁

public void closeLock ();

}

package Demo1;

public interface  Bell{

//响铃

public  void ring();

}

 

 

package Demo1;

//防盗门 继承门  实现锁

public class TheProofDoor extends Door implements Lock,Bell{

@Override

public void openLock() {

// TODO Auto-generated method stub

System.out.println("开锁...");

}

@Override

public void closeLock() {

// TODO Auto-generated method stub

System.out.println("关锁...");

}

@Override

public void open() {

// TODO Auto-generated method stub

System.out.println("开门...");

}

@Override

public void close() {

// TODO Auto-generated method stub

System.out.println("关门...");

}

@Override

public void ring() {

// TODO Auto-generated method stub

System.out.println("响铃");

}

}

 

 

package Demo1;

public class Test {

public static void main(String[] args) {

TheProofDoor tpf=new TheProofDoor();

tpf.ring();

tpf.openLock();

tpf.open();

tpf.close();

tpf.closeLock();

}

}

 

防盗门是一个门    is a的关系

防盗门有一个锁    has a的关系

能力:上锁、开锁

练习2

package demo4;

public abstract class HandSet {

 private String brand;

 private String  type;

public HandSet(String brand, String type) {

super();

this.brand = brand;

this.type = type;

}

public HandSet() {

super();

// TODO Auto-generated constructor stub

}

public String getBrand() {

return brand;

}

public void setBrand(String brand) {

this.brand = brand;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

 

   //发短信

public abstract void sendInfo() ;

 

   //打电话

public abstract void call();

 

//打印信息

public abstract void info();

}

 

 

package demo4;

//上网

public interface NetWork {

public void conn();

}

 

package demo4;

//播放音乐

public interface Play {

public void play(String content);

}

 

package demo4;

//拍照片

public interface TakingPictures {

public void takingPictures();

}

 

 

package demo4;

//普通手机 继承父类,实现播放音乐的接口

public class CommonHandSet extends HandSet implements Play {

@Override

public void play(String content) {

// TODO Auto-generated method stub

System.out.println("播放"+content);

}

@Override

public void sendInfo() {

// TODO Auto-generated method stub

System.out.println("发送信息");

}

@Override

public void call() {

// TODO Auto-generated method stub

System.out.println("打电话");

}

@Override

public void info() {

// TODO Auto-generated method stub

System.out.println("手机品牌"+super.getBrand());

System.out.println("手机的型号"+super.getType());

}

}

 

package demo4;

//智能手机 实现 上网 拍照

public class SmartHandSet extends HandSet implements NetWork,TakingPictures {

@Override

public void takingPictures() {

// TODO Auto-generated method stub

System.out.println("拍照");

}

@Override

public void conn() {

// TODO Auto-generated method stub

System.out.println("上网");

}

@Override

public void sendInfo() {

// TODO Auto-generated method stub

System.out.println("发送信息");

}

@Override

public void call() {

// TODO Auto-generated method stub

System.out.println("打电话");

}

@Override

public void info() {

// TODO Auto-generated method stub

// TODO Auto-generated method stub

System.out.println("手机品牌"+super.getBrand());

System.out.println("手机的型号"+super.getType());

}

}

 

package demo4;

public class Test {

public static void main(String[] args) {

 CommonHandSet common=new CommonHandSet();

 common.call();

 common.sendInfo();

 common.play("学猫叫");

 System.out.println("********************");

 SmartHandSet shs=new SmartHandSet();

 shs.setBrand("三星 Galaxy S9");

 shs.setType("128G");

 shs.call();

 shs.sendInfo();

 shs.takingPictures();

 shs.conn();

 shs.info();

}

}

练习3

package demo5;

  /*

   *

   * 纸厂

   *

   * *

public interface Paper {

public String getSize();

}

package demo5;

public class A4Paper implements Paper{

@Override

public String getSize() {

// TODO Auto-generated method stub

return "A4";

}

}

 

 

package demo5;

public class B5Paper implements Paper{

@Override

public String getSize() {

// TODO Auto-generated method stub

return "B5";

}

}

 

package demo5;

public interface InkBox {

/*

 * 墨盒厂

 * */

public String getColor();

}

 

 

package demo5;

public class BlackAndWhiteInkBox implements InkBox{

@Override

public String getColor() {

// TODO Auto-generated method stub

return "黑白墨盒";

}

}

 

package demo5;

public class ColorInkBox implements InkBox{

@Override

public String getColor() {

// TODO Auto-generated method stub

return "彩色墨盒";

}

}

 

package demo5;

   /*

    *

    * 打印

    * 组装

    *

    *

    * */

 

public class Printer {

/*接口的属性*/

      private InkBox inkBox;

      private Paper paper;

public InkBox getInkBox() {

return inkBox;

}

public void setInkBox(InkBox inkBox) {

this.inkBox = inkBox;

}

public Paper getPaper() {

return paper;

}

public void setPaper(Paper paper) {

this.paper = paper;

}

public Printer(InkBox inkBox, Paper paper) {

super();

this.inkBox = inkBox;

this.paper = paper;

}

public Printer() {

super();

// TODO Auto-generated constructor stub

}  

//打印

     public void work(){

      System.out.println("墨盒颜色:"+inkBox.getColor()+"纸张大小:"+paper.getSize());

     }     

}

 

 

 

package demo5;

public class Test {

public static void main(String[] args) {

//初始化打印机 打印机需要 墨盒和纸张

Printer printer=new Printer();

//黑白墨盒

InkBox heibai=new  BlackAndWhiteInkBox();

InkBox caise=new ColorInkBox();

//

Paper a4=new A4Paper();

Paper b5=new B5Paper();

//打印

printer.setInkBox(caise);

printer.setPaper(a4);

printer.work();

}

}

 

练习

package demo6;

public interface CPU {

public String getCpu();

}

 

package demo6;

public class AmdCpu implements CPU {

@Override

public String getCpu() {

// TODO Auto-generated method stub

return  "型号:AMD/主频:3.8GHZ";

}

}

 

 

package demo6;

public class InterCpu implements CPU {

@Override

public String getCpu() {

// TODO Auto-generated method stub

return "品牌:酷睿;主频:4.3GHZ";

}

}

 

 

package demo6;

public interface EMS {

public String getEms();

}

 

package demo6;

public class EMS4G implements EMS{ 

@Override

public String getEms() {

// TODO Auto-generated method stub

return  "4G内存";

}

}

 

package demo6;

public class EMS8G implements EMS{

@Override

public String getEms() {

// TODO Auto-generated method stub

return "8G内存";

}

}

 

 

package demo6;

public interface HardDisk {

//返回大小

public String getHardDisk();

}

 

package demo6;

public class KingstonHardDisk implements HardDisk{

@Override

public String getHardDisk() {

// TODO Auto-generated method stub

return "金士顿-1T机械硬盘,128G SSD";

}

}

 

 

package demo6;

public class SanHardDisk implements HardDisk{

@Override

public String getHardDisk() {

// TODO Auto-generated method stub

return "三星-2T机械硬盘,256G SSD";

}

}

 

 

package demo6;

public class Computer {

 private CPU cpu;

 private EMS ems;

 private HardDisk hd;

public CPU getCpu() {

return cpu;

}

public void setCpu(CPU cpu) {

this.cpu = cpu;

}

public EMS getEms() {

return ems;

}

public void setEms(EMS ems) {

this.ems = ems;

}

public HardDisk getHd() {

return hd;

}

public void setHd(HardDisk hd) {

this.hd = hd;

}

public Computer(CPU cpu, EMS ems, HardDisk hd) {

super();

this.cpu = cpu;

this.ems = ems;

this.hd = hd;

}

public Computer() {

super();

// TODO Auto-generated constructor stub

}

public void produce() {

System.out.println("cpu="+cpu.getCpu());

System.out.println("硬盘="+hd.getHardDisk());

System.out.println("内存="+ems.getEms());

}  

}

 

 

package demo6;

public class Test {

public static void main(String[] args) {

//new 一个对象

Computer com=new Computer();

//初始化cpu

CPU intel=new InterCpu();

CPU amd=new AmdCpu();

//硬盘

HardDisk sanxing=new SanHardDisk();

HardDisk kingston=new KingstonHardDisk();

//内存

EMS   ems4g=new EMS4G();

EMS   ems8g=new EMS8G();

//组装电脑

com.setCpu(intel);

com.setHd(kingston);

com.setEms(ems8g);

com.produce();

}

}

posted on 2018-09-07 09:03  流着眼泪奔跑  阅读(283)  评论(0编辑  收藏  举报

导航