Java学习-接口

  • 概念
    接口interface:接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合

  • 格式
    使用interface来进行声明,使用implements来实现接口

//接口模板
public interface InterfaceName{
public abstract void Act();
}

//一个类实现接口模板,多个接口使用逗号隔开
public class ClassName implements Interface01,Interface02,[...] {
...
}

//一种常用模式模板
public class ZiLei extends ChouXiangLei implements InterfaceXX,InterfaceXXX{
...
}
  • 特点
    1.成员变量:只能是public static final修饰,public static final [数据类型] [变量] = 值;
    2.成员方法:只能是public abstract修饰,并且接口中所有的方法不能有具体的实现;
    3.接口不可以创建对象,必须要实现类进行重写其抽象方法;

  • 类和接口的简单区别
    1.类和类:相互之间只支持 单继承,一个子类只能继承一个父类;

classB Extends classA

2.接口和接口:支持多继承,一个子接口可以继承多个父接口;(区别多层继承和多继承)

Interface3 Extends Interface0, Interface1, interface……

3.类和接口:类 实现(implements)接口,一个类可以实现多个接口;

Class A implements Interface0,Interface01,interface……

思考:为什么类不允许多继承?
如果A同时继承B和C,而B和C同时有一个相同的D()方法,A如何决定该继承那一个呢?
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。
关于接口继承详细内容可参考:http://www.cnblogs.com/littlepanpc/p/3616300.html

  • 抽象类和接口的语法区别
    1.抽象类可以提供成员方法实现细节,接口只能包含public abstract的抽象方法;
    2.抽象类可以包含各种成员变量,接口只能是默认隐藏的public static final修饰的成员变量;
    3.抽象类可以包含静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法;
    4.一个类只能继承一个抽象类,而一个类却可以实现多个接口(接口弥补了java的单继承);

  • 抽象类和接口的设计思想区别
    1.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
    2.抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

思考:为什么有时会用抽象类来实现接口?
在java一般的用法中,如果要用普通类来实现接口,则必须实现该接口中的所有方法,这样就会导致需要实现多余的方法;
但是抽象类实现接口,可以完全覆盖/重写 接口中的方法,也可只重写接口中的某几个方法(此时重写的方法体为空),子类再继承抽象类时,子类重写的方法即为抽象类中未重写接口中的方法,就可以针对性的实现接口中的方法;

//测试的接口
public interface InterfaceTest {
	public abstract void add();
	public abstract void minus();
	public abstract void divide();
	//如果使用下面的方法,SubTest必须需要重写此方法
//	public abstract void multiply();
}

//测试的抽象类用来实现接口中部分方法
public abstract class AbstractTest implements InterfaceTest{
	public void add() {}
	public void minus() {}
}

//测试的子类用来继承抽象类
public class SubTest extends AbstractTest{
	
	public void divide() {
		System.out.println("除法运算");
	}

//	@Override
//	public void multiply() {
//		// TODO Auto-generated method stub
//		System.out.println("乘法运算");
//	}
}

//打印结果:除法运算
public class Show {
	public static void main(String[] args) {
		SubTest tt = new SubTest();
		tt.divide();
	}
}
  • 常规应用
package com.jagger.InterfaceTry;

public class Show {

	public static void main(String[] args) {
		AirPlane F22 = new AirPlane();
		F22.Fight();
	}
}

public abstract class Flyer {
	public abstract void fly();
}

public interface InterFight {
	public abstract void Fight();
}

public class AirPlane extends Flyer implements InterFight {
	public void fly() {
		System.out.println("飞机喷气发动机飞行");
	}
	public void Fight() {
		System.out.println("飞机进行战斗");
	}
}

注意事项
1)一个类如果实现了一个接口,则要实现该接口的所有方法。方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。
2)对于接口,里面的组成只有抽象方法和全局常量,所以很多时候为了书写简单,可以不用写public abstract 或者public static final(默认添加,注意不写也不是default),所以接口中的访问权限只有一种:public。在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值