Java开发必备点11_接口

接口

接口的概念

生活中的接口: usb  hdmi vga  dp   type-c

usb接口:1994年  由微软 IBM  因特尔 共同指定的一种标准协议

程序中的接口:特殊的抽象类  规定了接口的使用者和接口实现者之间的规范

接口的定义和特点

定义的语法:
interface  接口名{}

特点:
	1.接口中的属性都是公开静态常量  都是用public static final 修饰的
	2.接口中的方法都是公开抽象方法  都是用public abstract 修饰的
	3.接口中没有构造方法
注意:
接口中属性如果没有加修饰符 默认是公开静态常量
接口中方法如果没有加修饰符 默认是公开抽象方法
案例:
package cn.baizhi.day12;

public class Demo {
	
}


//抽象类
abstract class Test{
	//属性
	int a = 10;//实例变量
	static int b = 20;//类变量
	public static final int C = 40;//公开静态常量
	
	//方法
	//抽象方法
	public abstract void m1();
	//一般的成员方法
	public void m2() {
		
	}
	//静态方法
	public static void m3() {
		
	}
	//构造方法
	public Test() {
		super();
	}
	
	
}

//接口
interface IA{
	//属性都是公开静态常量
	public static final int A = 10;
	//方法都是公开抽象方法
	public abstract void m1();
	
	//没有构造方法
	/*public IA(){
		
	}*/
}

接口的实现类

语法:
实现类  implements  接口{
}


注意:
	1.如果一个类实现了一个接口,如果这个类不想成为抽象类,那么这个类必须实现接口中所有方法
	2.接口没有构造方法 也没有对象 更不能手动去new
案例:定义一个类 实现这个接口

package cn.baizhi.day12;

public class Demo {
	
}
//抽象类
abstract class Test{
	//属性
	int a = 10;//实例变量
	static int b = 20;//类变量
	public static final int C = 40;//公开静态常量
	
	//方法
	//抽象方法
	public abstract void m1();
	//一般的成员方法
	public void m2() {
		
	}
	//静态方法
	public static void m3() {
		
	}
	//构造方法
	public Test() {
		super();
	}
	
	
}

//接口
interface IA{
	//属性都是公开静态常量
	public static final int A = 10;
	//方法都是公开抽象方法
	public abstract void m1();
	
	//没有构造方法
	/*public IA(){
		
	}*/
	
	
}

//2 把类变为抽象类
abstract class ClassA implements IA{

	/* 1 实现所有的方法
	public void m1() {
		// TODO Auto-generated method stub
		
	}*/
	
}


案例:
package cn.baizhi.day12;

public class Demo {
	public static void main(String[] args) {
		IA aIa = new ClassA();
		aIa.m1();
		
	}
}


//抽象类
abstract class Test{
	//属性
	int a = 10;//实例变量
	static int b = 20;//类变量
	public static final int C = 40;//公开静态常量
	
	//方法
	//抽象方法
	public abstract void m1();
	//一般的成员方法
	public void m2() {
		
	}
	//静态方法
	public static void m3() {
		
	}
	//构造方法
	public Test() {
		super();
	}
	
	
}

//接口
interface IA{
	int a = 10;
	void m1();
	/*//属性都是公开静态常量
	public static final int A = 10;
	//方法都是公开抽象方法
	public abstract void m1();
	
	//没有构造方法
	public IA(){
		
	}*/
	
	
}

//2 把类变为抽象类
class ClassA implements IA{

	//1 实现所有的方法
	public void m1() {
		System.out.println("实现类的m1");
		// TODO Auto-generated method stub
		
	}
	
	public void m2() {
		
	}
	
}

接口和类之间的关系

类和类之间
类和类之间是单继承 可以多层继承
接口和接口之间
接口和接口之间是多继承关系  一个接口可以有多个父接口
语法:
interface  子接口名 extends 父接口1,父接口2{}
注意:当一个类实现的接口有多个父接口时 必须实现所有接口中的方法
案例: 定义一个接口 IA  定义一个 IB接口  定义IC接口  继承  IA IB

package cn.baizhi.day12;

public class Demo {
	public static void main(String[] args) {
		IA aIa = new ClassA();
		IB bIb = new ClassA();
		IC cIc = new ClassA();
		
		aIa.m1();
		
		bIb.m2();
		
		cIc.m1();
		cIc.m2();
		cIc.m3();
		
	}
}


//IA
interface IA{
	void m1();
}

//IB
interface IB{
	void m2();
}

//IC
interface IC extends IA,IB{
	void m3();
}

//定义一个类 ClassA  实现 IC接口  
class ClassA implements IC{

	@Override
	public void m1() {
		// TODO Auto-generated method stub
		System.out.println("m1");
	}

	@Override
	public void m2() {
		// TODO Auto-generated method stub
		System.out.println("m2");
	}

	@Override
	public void m3() {
		// TODO Auto-generated method stub
		System.out.println("m3");
	}
	
}

接口和类之间
接口和类之间是多实现的关系  一个类可以实现多个接口
语法:
class  类名 implements  接口1,接口2{

}
注意:当一个类实现了多个接口  这个类必须实现所有接口的方法
案例: 在上一个案例的基础上 再定义 ID接口  ClassA 实现 IC 和 ID 接口
package cn.baizhi.day12;

public class Demo {
	public static void main(String[] args) {
		IA aIa = new ClassA();
		IB bIb = new ClassA();
		IC cIc = new ClassA();
		ID dId = new ClassA();
		aIa.m1();
		
		bIb.m2();
		
		cIc.m1();
		cIc.m2();
		cIc.m3();
		dId.m4();
		
	}
}


//IA
interface IA{
	void m1();
}

//IB
interface IB{
	void m2();
}

//IC
interface IC extends IA,IB{
	void m3();
}

//ID接口
interface ID{
	void m4();
}

//定义一个类 ClassA  实现 IC接口  
class ClassA implements IC,ID{

	@Override
	public void m1() {
		// TODO Auto-generated method stub
		System.out.println("m1");
	}

	@Override
	public void m2() {
		// TODO Auto-generated method stub
		System.out.println("m2");
	}

	@Override
	public void m3() {
		// TODO Auto-generated method stub
		System.out.println("m3");
	}
s
	@Override
	public void m4() {
		// TODO Auto-generated method stub
		System.out.println("m4");
	}
	
}

综合案例:描述一个最复杂的类 一个类继承一个类 实现了多个接口 其中的一个接口有多个父接口
注意:当一个类继承一个类,又实现了接口,必须先继承后实现接口

package cn.baizhi.day12;

public class Demo {
	public static void main(String[] args) {
		IA aIa = new ClassA();
		aIa.m1();
		
		IB bIb = new ClassA();
		bIb.m2();
		
		IC cIc = new ClassA();
		cIc.m1();
		cIc.m2();
		cIc.m3();
		
		ID dId = new ClassA();
		dId.m4();
		
		ClassB classB = new ClassA();
		classB.m5();
		
		ClassA classA = new ClassA();
		classA.m1();
		classA.m2();
		classA.m3();
		classA.m4();
		classA.m5();
		classA.m6();
        
        
        ClassA classA  = new ClassA();
		System.out.println(classA instanceof IA);
		System.out.println(classA instanceof IB);
		System.out.println(classA instanceof IC);
		System.out.println(classA instanceof ID);
		System.out.println(classA instanceof ClassB);
	}
}


//IA
interface IA{
	void m1();
}

//IB
interface IB{
	void m2();
}

//IC
interface IC extends IA,IB{
	void m3();
}

//ID接口
interface ID{
	void m4();
}
//定义ClassB 是A的父类
class ClassB{
	public void m5() {
		System.out.println("ClassB m5");
	}
}

//定义一个类 ClassA  实现 IC接口  
class ClassA extends ClassB implements IC,ID {

	@Override
	public void m1() {
		// TODO Auto-generated method stub
		System.out.println("m1");
	}

	@Override
	public void m2() {
		// TODO Auto-generated method stub
		System.out.println("m2");
	}

	@Override
	public void m3() {
		// TODO Auto-generated method stub
		System.out.println("m3");
	}

	@Override
	public void m4() {
		// TODO Auto-generated method stub
		System.out.println("m4");
	}
	
	public void m5() {
		System.out.println("ClassA m5");
	}
	
	public void m6() {
		System.out.println("自己的方法 m6");
	}	
}


接口的应用

扩展子类的功能
案例:  定义一个动物类   定义n个子类  狗  猫  鱼  鸭子  老虎 狼。。。。

package cn.baizhi.day12;

public class TestAnimal {
	public static void main(String[] args) {
		Animal[] animals = { new Dog(), new Dog(), new Dog(), new Dog(),
				new Cat(), new Cat(), new Cat(), new Cat(), new Cat(),
				new Fish(), new Fish(), new Fish(), new Fish(), new Fish(),
				new Tiger(), new Tiger(), new Tiger(), new Tiger(),
				new Tiger(), new Wolf(), new Wolf(), new Wolf(), new Wolf(),
				new Wolf(), new Duck() };
		// 计数器
		int count = 0;
		// 挑出数组中可以作为宠物的 cat dog fish
		for (int i = 0; i < animals.length; i++) {
			if (animals[i] instanceof Pet) {
				count++;
				System.out.println(animals[i]);
			}
		}

		System.out.println("宠物的个数:" + count);

	}
}

// 定义一个接口 Pet 次要的功能
interface Pet {

}

// 定义动物类
abstract class Animal {
	public abstract void eat();

	public abstract void sleep();
}

// 狗
class Dog extends Animal implements Pet {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

// 猫
class Cat extends Animal implements Pet {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

// 鱼
class Fish extends Animal implements Pet {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

// 鸭子
class Duck extends Animal {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

// 老虎
class Tiger extends Animal {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

// 狼
class Wolf extends Animal {

	@Override
	public void eat() {
		// TODO Auto-generated method stub

	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub

	}

}

案例: 定义一个手机类    vivo(拍照  音乐 )  sumsang( 曲面(quMian)  音乐  看电影(movie))   apple(全面屏 siri)
    xiaomi(nfc  音乐  电影  game  )
    
    一个手机店 有好多手机   找出这些手机里 能拍照(camera)  听音乐(music)的  能看电影的
代码:
	主要的功能 ----父类  Phone  (call   message )
	次要的功能-----接口  camera  music  hookface  movie  allOver   siri  NFC  game 
	子类:
	vivo  sumsang    apple   xiaomi
案例:
package cn.baizhi.day12;

public class TestPhone {
	public static void main(String[] args) {
		Phone[] phones = { new Vivo(), new Vivo(), new Vivo(), new Vivo(),
				new Vivo(), new SumSang(), new SumSang(), new SumSang(),
				new SumSang(), new Apple(), new Apple(), new Apple(),
				new Apple(), new Apple(), new XiaoMI(), new XiaoMI(),
				new XiaoMI(), new XiaoMI(), new XiaoMI()

		};
		
		//遍历
		int sum = 0;
		for (int i = 0; i < phones.length; i++) {
			if (phones[i] instanceof Movie) {
				sum++;
				System.out.println(phones[i]);
			}
		}
		System.out.println("手机的个数:"+sum);
	}
}

// phone
abstract class Phone {
	// call
	public abstract void call();

	// message
	public abstract void message();
}

// 四个子类
class Vivo extends Phone implements Camera, Music {

	@Override
	public void call() {
		// TODO Auto-generated method stub

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub

	}
}

class SumSang extends Phone implements HookFace, Music, Movie {

	@Override
	public void call() {
		// TODO Auto-generated method stub

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub

	}
}

class Apple extends Phone implements AllOver, Siri {

	@Override
	public void call() {
		// TODO Auto-generated method stub

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub

	}
}

class XiaoMI extends Phone implements NFC, Music, Movie, Game {

	@Override
	public void call() {
		// TODO Auto-generated method stub

	}

	@Override
	public void message() {
		// TODO Auto-generated method stub

	}
}

// 接口 次要
interface Camera {
}

interface Music {
}

interface HookFace {
}

interface Movie {
}

interface AllOver {
}

interface Siri {
}

interface NFC {
}

interface Game {
}

解耦合
案例:
台灯类  属性 灯泡   方法 开关

台灯类 (灯泡  开关)
灯泡类 (亮 ) 
案例:
package cn.baizhi.day12;

public class TestInterfaceLight {
	public static void main(String[] args) {
		//买一个灯泡
		Bai bai = new Bai();
		Huang huang = new Huang();
		//买一个台灯
		TaiDeng taiDeng = new TaiDeng();
		//安灯泡
		taiDeng.set(huang);
		//按开关
		taiDeng.powerOn();
	}
}

//台灯
class TaiDeng{
	//实现了螺纹接口的灯泡
	private LuoWen luoWen ;
	
	//安灯泡
	public void set(LuoWen l) {
		this.luoWen = l;
	}
	//开关
	public void powerOn() {
		luoWen.liang();
	}
}

//接口  螺纹
interface LuoWen{
	void  liang();
}
//各种灯泡  实现  接口

class Bai implements LuoWen{

	@Override
	public void liang() {
		System.out.println("白花花的光 ");
		
	}
	
}

class Huang implements LuoWen{

	@Override
	public void liang() {
		System.out.println("黄灿灿的光");
		
	}
	
}
接口的回调
所有电脑 ---usb                 生产鼠标的厂家
接口的使用者                     接口的实现者
不用去关心接口的使用者在内部是怎么实现的  只需要接口的实现者给出接口中规定的规则就可以了   
案例:
package cn.baizhi.day12;

import java.util.Arrays;

public class TestStudent {
	public static void main(String[] args) {
		/*int[] a = {2,4,56,7,8,9,5,3,32,56,65};
		//排序
		Arrays.sort(a);
		
		//遍历
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+"  ");
		}*/
		
		//定义一个学生数组  存放不同的学生
		Student[] students = {
				new Student("遇",78,190.5),
				new Student("好爽", 99,210.7),
				new Student("源", 39,250.9),
				new Student("洋", 17,180.6),
				new Student("齐美", 18,170.8),
				new Student("蕊", 18,171.9),
				new Student("铮", 56,234.5)
		};
		
		//快速排序
		Arrays.sort(students);
		
		//遍历
		for (int i = 0; i < students.length; i++) {
			System.out.println(students[i].name+" :"+students[i].age+":"+students[i].hight);
		}
		
		
	}
}

class Student implements Comparable<Student>{
	String name;
	int age;
	double hight;
	public Student(String name,int age,double hight){
		this.name = name;
		this.age = age;
		this.hight = hight;
	}
	
	/*
	 * this -------------o
	 * this.age<o.age   负数
	 * this.age==o.age  0
	 * this.age>o.age   正数
	 * 
	 * */
	@Override
	public int compareTo(Student o) {
		if (this.hight<o.hight) {
			return -1;
		}else if (this.hight==o.hight) {
			return 0;
		}else {
			return 1;
		}
		
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值