49.接口

接口的作用

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。

接口和抽象类的区别?

抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

接口和实现类不是父子关系,是实现规则的关系。

定义和使用接口

定义接口的详细说明:

  1. 接口的访问修饰符:只能是public或默认。

  2. 接口名:和类名采用相同命名机制。

  3. extends:接口可以多继承。

  4. 常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。

  5. 方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。

package OOprogress2;

//定义接口 
public interface myInterface {
	//所有方法都是抽象方法
	/*public abstract*/ void test01();  //public abstract可省略
	
	//常量
	/*public static final*/ int MAX_AGE = 100;	//public static final可省略
} 

//子类通过implements来实现接口中的规范
class myClass implements myInterface {
	
	//必须对抽象方法实现  
	@Override
	public void test01() {
		//可以随意访问接口中的常量
		System.out.println(MAX_AGE);
		System.out.println("myClass.test01()");
	}
}

package OOprogress2;
/*
 * 接口定义和使用
 */
public class testInterface {
	public static void main(String[] args) {
		Volant v = new Angle(); 
		v.fly();
		//v.helpOthers();  //error只能实现自己接口拥有的方法
		
		Honest h = new Angle();
		h.helpOthers();
	}
}

/*
 * 飞行器接口
 */
interface Volant{
	public static final int FIY_HEIGHT = 108000;
	public abstract void fly();  //public abstract可省略
}

/*
 * 善良接口
 */
interface Honest{
	void helpOthers();
}



//实现类可以实现多个接口
class Angle implements Volant, Honest{

	@Override
	public void helpOthers() {
		System.out.println("Angle.helpOthers()");
	}

	@Override
	public void fly() {
		System.out.println("Angle.fly()");
	}
}


class goodMan implements Honest{

	@Override
	public void helpOthers() {
		System.out.println("goodMan.helpOthers()");
	}
}

class birdMan implements Volant{

	@Override
	public void fly() {
		System.out.println("birdMan.fly()");
	}
	
}

接口的多继承
package OOprogress2;
/*
 * 接口的多继承
 */
public class testInterface2 {
	public static void main(String[] args) {
		C c = new subClass();
		c.testa();
		c.testb();
		c.testc();
		
		A a = new subClass();
		a.testa();
	}
}

interface A {
    void testa();
}

interface B {
    void testb();
}

/**接口可以多继承:接口C继承接口A和B*/
interface C extends A, B {
    void testc();
}

//类只有单继承,接口有多继承
class subClass implements C {
    public void testc() {
    	System.out.println("subClass.testc()");
    }
    public void testa() {
    	System.out.println("subClass.testa()");
    }
    public void testb() {
    	System.out.println("subClass.testb()");
    }
}

面向接口编程

面向接口编程是面向对象编程的一部分。

  • 为什么需要面向接口编程?

软件设计中最难处理的就是需求的复杂变化,需求的变化更多的体现在具体实现上。我们的编程如果围绕具体实现来展开就会陷入”复杂变化”的汪洋大海中,软件也就不能最终实现。我们必须围绕某种稳定的东西开展,才能以静制动,实现规范的高质量的项目。

接口就是规范,就是项目中最稳定的东东! 面向接口编程可以让我们把握住真正核心的东西,使实现复杂多变的需求成为可能。

通过面向接口编程,而不是面向实现类编程,可以大大降低程序模块间的耦合性,提高整个系统的可扩展性和和可维护性。

面向接口编程的概念比接口本身的概念要大得多。设计阶段相对比较困难,在你没有写实现时就要想好接口,接口一变就乱套了,所以设计要比实现难!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值