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();

}

}

原文地址:https://www.cnblogs.com/-lyr/p/9602543.html

时间: 2024-08-10 16:16:52

java基础---接口(二)的相关文章

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

Java基础十二--多态是成员的特点

Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println(f.num);//是父类,答案是3 2,成员函数(非静态). 编译看左边,运行看右边. 因为成员函数存在覆盖特性. Fu f = new Zi();//f.show();输出的是子类里面的show方法 3,静态函数. 编译和运行都看左边. 静态函数不具备多态性,多态性是对象的多态性,然后静态函数不涉

java基础(二章)

java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l  必须以字母.下划线 _ .美元符号 $ 开头 l  变量中,可以包括数字 l  变量中,不能出现特殊的符号,空格 l  java中的关键字(红色字体),不能做变量名 3.变量命名,遵循 骆驼命名法(变量由1个以上的单词组成,第1个单词首字母小写,后面单词的首字母大写) 二, 数据类型 a)        数字(整型int(整数).双精度浮点型double(小数)) b)        字符型(c

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

Java基础知识(二)

1,字符串 new String("abc")创建了几个对象? 一个或两个,如果常量池中原来有"abc",则只创建一个对象:如果常量池中原来没有字符串"abc",那么就会创建两个对象. String s="abc"; String s1="ab"+"c"; System.out.println(s==s1); 输出 true ,因为"ab"+"c"

Java 基础(二)| 使用 lambad 表达式的正确姿势

前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握 lambda 表达式,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 lambda 表达式 Java8 是我们使用最广泛的稳定 Java 版本,lambda 就是其中最引人瞩目的新特性.lambda 是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,可以使代码看起来更加简洁.是不是听得一脸懵逼?我举个栗子你就明白了. 烂掉牙的例子,在没有 lambda

黑马程序员——Java基础语法(二)---流程控制

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本文主要介绍java基础语法中的流程控制,流程控制是我们写出灵活代码的基础.常见的流程控制主要有四类:判断结构.选择结构.循环结构.其他控制结构 一.判断结构 判断结构的标志是if语句,if语句主要有三种表现形式: 1.if(条件表达式) { 执行语句 } 注意: 1.如果if语句中只有一条语句,那么可以不写大括号.不过初学者一定要写括号,以免出错. 2.如果if语句没写大括号,if就只能控制

Java 基础总结(二)

本文参见:http://www.cnblogs.com/dolphin0520/category/361055.html 1. 字节流与和字符流 1). 字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的. 2). 字符流使用了缓冲区,而字节流没有使用缓冲区. 3). 缓冲区可以简单地理解为一段内存区域. 2. 典型的垃圾收集算法: 1). Mark-Sweep(标记-清除)算法 2). Copying(复制)算法

JAVA基础接口集合框架

接口--------------------------------------------------------------------------------一.接口(是一种规范)1.接口名/接口文件与类类似,也是用.java文件编写2.关键字 interface 接口名命名规范与类名相同 习惯上可以使用I开头表示3. 接口额访问修饰符只能使用public和default修饰不能使用private和protected在接口中默认缺省为public4.接口中的所有属性只能为公开的静态的常量而