java--interface

接口(interface)  是与类并行的一个概念

1.接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法。
2.接口是没有构造器的。
3.接口定义的就是一种功能。此功能可以被类所实现(implements)。
比如:class CC extends DD implements AA
4.实现接口的类,必须要重写其中的所有的抽象方法,方可实例化。若没有重写所有的抽象方法,则此类仍为一个抽象类
5.类可以实现多个接口。----java 中的类的继承是单继承的
6.接口与接口之间也是继承的关系,而且可以实现多继承
>5,6描述的是java中的继承的特点。

public class TestInterface {
	public static void main(String[] args) {
		System.out.println(AA.I);
//		AA.I = 13;
	}
}

interface AA{
	//常量:所有的常量都用public static final修饰
	int I = 12;
	boolean FLAG = false;
//	int i;
	//抽象方法:所有的都用public abstract修饰
	void method1();
	void method2();
}

abstract class BB implements AA{
	
}
class DD{
	
}
interface MM{
	void method3();
}
class CC extends DD implements AA,MM{
	public void method1(){
		
	}
	public void method2(){
		
	}
	public void method3(){
		
	}
}
//接口之间仍为继承关系!(多继承)
interface JJ extends MM,AA{
	void method4();
}

class GG implements JJ{

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

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

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

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

接口与具体的实现类之间也存在多态性

package test11;

public class Testinterface {

	public static void main(String[] args) {
       Duck d = new Duck();
       Testinterface.test1(d);
       Testinterface.test2(d);
       Testinterface.test3(d);
		

	}
	public static void test1(Runner r) {
		r.run();
	}
	public static void test2(Swimmer s) {
		s.swim();
	}
	public static void test3(Flier f) {
		f.fly();
	}

}
interface Runner{
	public abstract void run();
}
interface Swimmer{
    void swim();
}
interface Flier{
	void fly();
}
class Duck implements Runner,Swimmer,Flier{

	@Override
	public void fly() {
		System.out.println("我会飞");
	}

	@Override
	public void swim() {
        System.out.println("我会游泳");
	}

	@Override
	public void run() {
		System.out.println("我会跑");
	}
	
}

工厂方法

概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

FactoryMethod使一个类的实例化延迟到其子类。

适用性:

1、当一个类不知道它所必须创建的对象的类的时候

2、当一个类希望由它的子类来指定它所创建的对象的时候

3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

package test11;
//工厂方法的设计模式
public class TestFactoryMethod {

	public static void main(String[] args) {
		IFactoryWork i = new StudentWorkFactory();
		i.getWork().dowork();
		
		IFactoryWork i1 = new TeacherWorkFactory();
		i1.getWork().dowork();

	}

}
interface IFactoryWork{
	Work getWork();
}
class StudentWorkFactory implements IFactoryWork{

	@Override
	public Work getWork() {
		return new StudentWork();
	}
	
}
class TeacherWorkFactory implements IFactoryWork{

	@Override
	public Work getWork() {
		// TODO Auto-generated method stub
		return new TeacherWork();
	}
	
}

interface Work{
	void dowork();
}
 class StudentWork implements Work{

	@Override
	public void dowork() {
		System.out.println("我爱学习");
		
	}
	 
 }
 class TeacherWork implements Work{

	@Override
	public void dowork() {
		System.out.println("我爱工作");
		
	}
	 
 }

代理模式:为其他对象提供一种代理以控制对这个对象的访问

package test11;
//代理类
public class TestProxyObject {

	public static void main(String[] args) {
		Object obj = new ProxyObject();
		obj.action();

	}

}
interface Object{
	void action();
}
class ProxyObject implements Object{
     Object obj;
     
     public ProxyObject() {
    	 System.out.println("代理类创建成功");
    	 obj = new ObjectImpl();
     }

	@Override
	public void action() {
		System.out.println("代理类开始执行");
		obj.action();
		System.out.println("代理类执行结束");
		
	}
	
	
}
class ObjectImpl implements Object{

	@Override
	public void action() {
	    System.out.println("======被代理开始执行=====");
	    System.out.println("======具体操作=====");
	    System.out.println("======被代理执行完毕=====");
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值