HOLLY老师KD07班级教学展示
KD07高薪三连想
放开想不设限什么?10k高薪都嫌少?各位小伙伴们大家好:
开讲之前还是要提一下"口碑"的事!没办法,领导施加压力,天天催口碑的事,要完成部门任务,我也没办法!!Holly也想好好静下心研究技术和大家一起分享,但是“口碑任务“完不成,就没法静心搞技术!我每天上10节课,早8:30到晚8:30,下班了,在写微信公众号,整理知识点!有点小辛苦,有点累,但是还是要每天坚持做自己该做的事!教学要做,个人提升要做,团队任务也要完善,毕竟在一个团队了,每个人不能做的事情都是自己喜欢做的,但是这也是我的工作内容的一部分,也需要完成!所以各位小伙伴们,如果你身边有想学java的,UI设计,WEB前端,大数据,.net,记得联系holly老师!
此致 敬礼
可爱的Holly老师
2017.12.23
ddd
JavaOOP (四) 接口(一) 、知识点梳理
DDD
ddd的、
1.接口和抽象类的区别
(1)语法不同
(2)接口不能实例化
(3)接口可以继承接口,但是接口不能继承类
(4)接口中只能存在公共的静态常量和公共的抽象的方法
(5)如果某个类要实现接口,则要实现接口中所有的抽象方法,除非子类也是抽象类
(6)抽象类也不能实例化
(7)抽象类也可以继承抽象类,但是抽象类可以继承类
(8)抽象类中可以有普通类有的所有内容,还可以有抽象方法
(9)如果某个类要继承抽象类,则要实现抽象类中所有的抽象方法,除非子类也是抽象类
2.定义接口的语法
public interface 接口名称{ }
3.接口这里用到了几个设计原则
(1)接口隔离原则
(2)单一职能原则
4.如何使用多态实现接口的内容
(1)接口类型 对象名=new 实现类类型(参数列表);
(2)该对象只能调用实现类重写的接口的方法
5.接口表示什么?
(1)接口表示一种能力
(2)接口表示一种约定
6.接口有比抽象类更好的特性:
(1)可以被多继承
(2)设计和实现完全分离
(3)更自然的使用多态
(4)更容易搭建程序框架
(5)更容易更换实现
dd
二、案例1:Holly解说接口的由来
DDD
dddd
1.假设Pet是抽象类.
2.因为抽象类不能new,所以不能有有参数的构造
3.因为有参数的构造,作用是完成私有属性的初始化操作
4.因为做封装, 所以在构造方法中调用普通的public的
setget方法,
↓
但是不能new,所以不能有有参数的构造,所以不能有set和get方法 ↓
因为set和get方法时普通的方法,所以不应该有普通方法
↓
因为不能new,所以不能通过对象名.方法名去调用普通方法,所以不应该有普通方法
↓
在封装的时候,普通get和set方法,是完成私有属性的合法赋值操作操作的
↓
因为不能有普通的set和get方法,所以不应该有私有的属性
↓
只能有公共的静态常量和抽象的方法
↓
起名叫做接口 Interface
↓
可以省略public static final
可以省略 public abstract
----------------------------------------------
代码如下:
package com.part1;
/**
* 抽象类: 出现的目的:不能new
*/
public interface Pet {
/* private int health; */
public static final String EYES = "2只";
static final String EYES2 = "2只";
final String EYES3 = "2只";
// ☆如下是我们常写的
String EYES4 = "2只";
public abstract void say();
abstract void say1();
// ☆如下是我们常写的
void say2();
/*
* public Pet() { } public Pet(int health) { this.setHealth(health); }
* public int getHealth() { return health; } public void setHealth(int
* health) { if(health>0 || health<=100){ this.health = health; }else{
* System.out.println("非法赋值"); } }
*/
}
DDDD
三、案例2:接口表示一种能力
DDD
DDDD
ddd的、
1.先定义USB接口,usb接口本身不具有任何功能,它的能力由外界设备所决定
package com.part2;
/**
* USB接口
*/
public interface Usb {
/*
* 服务
*/
void service();
}
2. 定义usb的外接设备优盘UDisk.java类,
package com.part2;
/**
* U盘
* 此类叫做接口的实现类
*
*/
public class UDisk implements Usb {
@Override
public void service() {
System.out.println("U盘传输数据");
}
}
3. 定义usb的外接设备优盘UFan.java类,
package com.part2;
/**
* USB风扇
* @author Administrator
*/
public class UFan implements Usb {
@Override
public void service() {
System.out.println("提供电流,开始吹风...");
}
}
4.定义测试类Test.java测试功能
package com.part2;
public class Test {
public static void main(String[] args) {
//接口的类型,实现类的对象
Usb disk=new UDisk();
disk.service();
Usb fan=new UFan();
fan.service();
}
}
运行结果如下:
U盘传输数据
提供电流,开始吹风...
四、案例3:解决java中单根继承问题
DD
DDD
题目:实现防盗门防盗功能,防盗门是门,门可以开和关,防盗门有上锁开锁和门铃等功能。
1.定义防盗门Door.java抽象类
package com.part3;
/**
* 1.门的抽象类
* @author Administrator
*
*/
public abstract class Door {
/**
* 开门
*/
public abstract void open();
/**
* 关门
*/
public abstract void close();
}
2.定义门铃接口DoorBell.java类
package com.part3;
/**
* 门铃
* @author Administrator
*/
public interface DoorBell {
/**拍照*/
void tackPhoto();
}
3.定义锁的接口Lock.java类
package com.part3;
/**
* 锁的接口
* @author Administrator
*/
public interface Lock {
/**
* 上锁
*/
void lockUp();
/**
* 开锁
*/
void openLock();
}
4.定义防盗门TheftproofDoor.java类实现防盗功能
package com.part3;
/**
* 防盗门实现防盗功能
* @author Administrator
*/
public class TheftproofDoor extends Door implements Lock,DoorBell {
/**关门*/
public void close() {
System.out.println("拉门,门关上了");
}
/**开门*/
public void open() {
System.out.println("推门,门开了");
}
/**上锁*/
public void lockUp() {
System.out.println("插入钥匙,右转三圈,上锁");
}
/**开锁*/
public void openLock() {
System.out.println("插入钥匙,左转三圈,开锁");
}
/**门铃*/
public void tackPhoto() {
System.out.println("玲..........拍照......");
}
}
5.定义测试类Test.java测试防盗功能:
package com.part3;
public class Test {
public static void main(String[] args) {
TheftproofDoor theDoor=new TheftproofDoor();
theDoor.close(); //关门
theDoor.lockUp(); //上锁
theDoor.tackPhoto();//门铃
theDoor.openLock(); //开锁
theDoor.open(); //开门
}
}
运行结果如下:
拉门,门关上了
插入钥匙,右转三圈,上锁
玲..........拍照......
插入钥匙,左转三圈,开锁
推门,门开了
五、案例4:接口表示一种约定
DDD
DDD
ddd的、
题目:打印机实现打印功能,需要有墨盒和纸张的接口
墨盒以后黑白和彩色两种墨盒
1. 定义纸张接口Paper.java
package com.part4;
/**
* 纸张接口
*/
public interface Paper {
/**
* 获取纸张大小
* @return
*/
String getSize();
}
2.纸张接口的具体实现类A4纸张
package com.part4;
/**
* 纸张接口的具体实现类A4纸张
* @author Administrator
*/
public class A4Paper implements Paper {
/**
* 获取纸张大小
*/
@Override
public String getSize() {
return "A4";
}
}
3.纸张接口的具体实现类B5纸张
package com.part4;
/**
* 纸张接口的具体实现类B5纸张
* @author Administrator
*/
public class B5Paper implements Paper {
/**
* 获取纸张大小
*/
@Override
public String getSize() {
return "B5";
}
}
4.墨盒接口
package com.part4;
/**
* 墨盒接口
*/
public interface Ink {
/**
* 获取颜色
* @return
*/
String getColor();
}
5.墨盒接口的具体实现类彩色墨盒
package com.part4;
/**
* 墨盒接口的具体实现类彩色墨盒
* @author Administrator
*/
public class ColorInk implements Ink {
@Override
public String getColor() {
return "彩色";
}
}
6.墨盒接口的具体实现类黑白墨盒
package com.part4;
/**
* 墨盒接口的具体实现类黑白墨盒
* @author Administrator
*/
public class GrayInk implements Ink {
@Override
public String getColor() {
return "黑色";
}
}
7.打印机组装
package com.part4;
/**
* 打印机组装
*/
public class Printer {
/**
* 纸张
*/
private Paper paper;
/**
* 墨盒
*/
private Ink ink;
public Printer() {
}
public Printer(Paper paper, Ink ink) {
this.paper = paper;
this.ink = ink;
}
/**
* 打印机打印的方法
*/
public void print(){
System.out.println("使用"+this.getInk().getColor()
+"墨盒在"+this.getPaper().getSize()+"纸张上打印");
}
public Paper getPaper() {
return paper;
}
/**
* 父类作为方法形参实现多态
* @param paper
*/
public void setPaper(Paper paper) {
this.paper = paper;
}
public Ink getInk() {
return ink;
}
/**
* 父类作为方法形参实现多态
* @param ink
*/
public void setInk(Ink ink) {
this.ink = ink;
}
}
8.测试类测试
package com.part4;
public class Test {
public static void main(String[] args) {
//父类引用子类对象
Paper A4=new A4Paper();
Ink gray=new GrayInk();
Paper B5=new B5Paper();
Ink color=new ColorInk();
//1.使用黑色墨盒在A4纸张打印
Printer p=new Printer(A4, gray);
p.print();
//2.使用黑色墨盒在B5纸张打印
p=new Printer(B5, gray);
p.print();
//3.使用彩色墨盒在A4纸张打印
//4.使用彩色墨盒在B5纸张打印
}
}
运行结果如下:
使用黑色墨盒在A4纸张上打印
使用黑色墨盒在B5纸张上打印
有问题或更好建议可以联系holly老师,让我们共同学习:
QQ/微信:964918306
每周会不定期的进行: 斗鱼直播讲堂(房间号672217)
直播时间会在前一天的微信公众号通知!
希望大家天天关注微信公众号哦!
博客园: 红酒人生(有大量技术帖子)
想高薪就业 就学习java,安卓,大数据,数据库,web开发,前端开发 ,可以来" 北大青鸟南京中博软件学院" 找 Holly老师 哦!!!Holly老师欢迎您来咨询!
长按下方二维码关注Holly老师公众号,一起学java吧!
长按识别二维码
北大青鸟
南京中博软件学院