JavaSE学习笔记 Day13

JavaSE学习笔记 Day13

个人整理非商业用途,欢迎探讨与指正!!
« 上一篇


文章目录

  • JavaSE学习笔记 Day13
    • ···
    • 十一、接口
      • 11.1定义接口
      • 11.2接口和抽象类在代码上的区别
      • 11.3接口的使用
      • 11.4接口的规范
      • 11.5接口实现多态
      • 11.6接口和类之间的关系
      • 11.7常量接口
      • 11.8接口的设计
      • 11.9使用接口的好处
      • 11.10设计中接口和抽象类的区别
      • 11.11接口的回调原理


···

十一、接口

概念:相当于特殊的抽象类
定义方式,组成部分和抽象类类似

使用interface进行定义(占用class位置)

特点:
 没有构造,不能创建对象
 成员:
  公共的静态常量(默认的)
  公共的抽象方法(默认的)
接口:更趋向功能

使用implements进行接口的实现(和继承类似)
 实现时同样需要重写抽象方法,除非类是抽象类

11.1定义接口

接口定义功能

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();//连接方法
}

11.2接口和抽象类在代码上的区别

相同点:
可编译为字节码文件
不能创建对象
可以作为引用(父类类型子类引用/接口类型实现类引用)
都是Object的子类
不同点:
接口中的属性都是默认为public final static的,抽象类中没有限定
接口中的方法都是默认为public abstract的,抽象类中没有限定
接口中没有构造方法,没有代码块,没有静态代码块,抽象类中没有限定

11.3接口的使用

一种能力和约定,接口定义功能(增删改查)
接口中功能的方法没有具体的实现,只是定义功能

注意点:
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("狗狗是暗杀者..");
	}
}

11.4接口的规范

任何类实现接口时,都必须重写(实现)接口中的所有抽象方法,除非此类为抽象类
实现类的命名,建议以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();
	}
}

11.5接口实现多态

实现关系,方法实现,接口new实现
接口也是多态参数JavaSE学习笔记 Day13_第1张图片

11.6接口和类之间的关系

类和类之间
 单继承
 子类 extends 父类
类和接口之间
 多实现
 类 implements 接口1,接口2…接口n
接口和接口之间
 多继承
 子接口 extends 接口1,接口2…接口n

//	接口的继承:多继承只存在于接口中
public interface MyInter extends Fly,Skill{

}

注意:先继承后实现
先有基本的结构在去扩展功能

11.7常量接口

可以将多个常量的值,存储与一个接口中
好处:方便管理,增强可读性

public interface Role {

	int STUDENT_VLAUE = 1;//学生角色
	int TEAHCER_VALUE = 2;//老师角色
	int AUNT_VALUE = 3;//阿姨角色
}

11.8接口的设计

概念:是一种标准,规范
 定义某个模块的功能模板,例如: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;
	}
}

11.9使用接口的好处

可以更自然的使用多态
设计与实现完全分离
降低程序的耦合度
更容易搭建程序框架
可以更加方便的去更换实现

11.10设计中接口和抽象类的区别

接口用于定义共同点的(功能的实现都是类似的)
抽象类用于定义差异性(共同的操作拿出来给父类,差异由子类去实现)

11.11接口的回调原理

接口的回调:先有接口的使用者,后有接口的实现者

/**
 * @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());
	}
}

你可能感兴趣的:(JavaSE,笔记,java)