个人整理非商业用途,欢迎探讨与指正!!
« 上一篇
概念:相当于特殊的抽象类
定义方式,组成部分和抽象类类似
使用interface进行定义(占用class位置)
特点:
没有构造,不能创建对象
成员:
公共的静态常量(默认的)
公共的抽象方法(默认的)
接口:更趋向功能
使用implements进行接口的实现(和继承类似)
实现时同样需要重写抽象方法,除非类是抽象类
接口定义功能
package com.qf.myinter;
/**
* 定义usb接口
* interface定义接口
* 接口也是特殊的类型,引用类型
* */
public interface USB {
// 公共的常量
public static final int NUM = 10;
// 定义属性
double pi = 3.14;//有public static final默认修饰
// 公开的抽象的方法
public abstract void test();
void b();//默认就是抽象的公开的方法
void conn();//连接方法
}
相同点:
可编译为字节码文件
不能创建对象
可以作为引用(父类类型子类引用/接口类型实现类引用)
都是Object的子类
不同点:
接口中的属性都是默认为public final static的,抽象类中没有限定
接口中的方法都是默认为public abstract的,抽象类中没有限定
接口中没有构造方法,没有代码块,没有静态代码块,抽象类中没有限定
一种能力和约定,接口定义功能(增删改查)
接口中功能的方法没有具体的实现,只是定义功能
注意点:
java为单继承,父类中的方法若没有能力满足子类的要求了,可以使用接口去再次扩充子类的功能
子类可以继承父类的同时实现多个接口
public abstract class Animal {
public abstract void eat();
}
public interface Fly {
void fly();
}
public interface Skill {
void kill();
}
public class Dog extends Animal implements Fly,Skill{
@Override
public void eat() {
System.out.println("狗狗吃东西");
}
@Override
public void fly() {
System.out.println("狗狗会飞");
}
@Override
public void kill() {
System.out.println("狗狗是暗杀者..");
}
}
任何类实现接口时,都必须重写(实现)接口中的所有抽象方法,除非此类为抽象类
实现类的命名,建议以Impl结尾,例如:UserDao接口 实现类名字为UserDaoImpl
另一种习惯:UserDao接口 实现类名IUserDao
和父类一样,同样可以作为声明的引用
public class Test03 {
public static void main(String[] args) {
// 接口类型 实现类对象
Fly dog = new Dog();
Skill dog1 = new Dog();
Animal dog2 = new Dog();
}
}
类和类之间
单继承
子类 extends 父类
类和接口之间
多实现
类 implements 接口1,接口2…接口n
接口和接口之间
多继承
子接口 extends 接口1,接口2…接口n
// 接口的继承:多继承只存在于接口中
public interface MyInter extends Fly,Skill{
}
注意:先继承后实现
先有基本的结构在去扩展功能
可以将多个常量的值,存储与一个接口中
好处:方便管理,增强可读性
public interface Role {
int STUDENT_VLAUE = 1;//学生角色
int TEAHCER_VALUE = 2;//老师角色
int AUNT_VALUE = 3;//阿姨角色
}
概念:是一种标准,规范
定义某个模块的功能模板,例如:xxx的增删改查
/**
* 用户系统的用户模块
* */
public interface UserInterface {
/**
* 增删改查
* */
// 增删改是可以没有返回值void 或者 返回boolean类型
boolean add(User user);
boolean update(User user);
boolean delete(int no);
// 查询 返回结果就是查询的内容是什么对象
public User getById(int no);
public User[] queryAll();
// 批量操作
// 各种查询
}
package com.qf.myinter;
public class UserInterfaceImpl implements UserInterface{
// 目前只有一个可以同时存储多个数据的容器叫数组
// 数组 集合 IO(存储到磁盘) 数据库
// 数据的位置,叫做持久层
User[] users = {};
@Override
public boolean add(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean update(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean delete(int no) {
// TODO Auto-generated method stub
return false;
}
@Override
public User getById(int no) {
// TODO Auto-generated method stub
return null;
}
@Override
public User[] queryAll() {
// TODO Auto-generated method stub
return null;
}
}
可以更自然的使用多态
设计与实现完全分离
降低程序的耦合度
更容易搭建程序框架
可以更加方便的去更换实现
接口用于定义共同点的(功能的实现都是类似的)
抽象类用于定义差异性(共同的操作拿出来给父类,差异由子类去实现)
接口的回调:先有接口的使用者,后有接口的实现者
/**
* @author whiteZebra
* @version 1.0.0
* 该接口判断一个数是否为奇数
* */
public interface MyInter {
/**
* @param num传入一个数 判断这个数是否为奇数
* @return boolean true是奇数 false偶数
* */
boolean odd(int num);
}
/**
*
* @author y1538
* 调用接口的方法
*/
public class MyTest {
public static void check(int num,MyInter mi) {
// 多态
boolean flag = mi.odd(num);
System.out.println(flag?"奇数":"偶数");
}
}
public class MyInterImpl implements MyInter{
@Override
public boolean odd(int num) {
if(num % 2 == 0) {
return false;
}
return true;
}
}
// 测试环节在最后的
// 工具的调用者
public class Test01 {
// 测试环节
public static void main(String[] args) {
// 参数1为需要被判断的内容 参数2为功能
MyTest.check(11, new MyInterImpl());
}
}