接口,在JAVA中是一个抽象类型,(是对行为的一种抽象)是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
创建一个接口(接口中不能有普通方法)
interface A{
public int age = 10;//数据成员默认是static final
public void fun1();//方法默认是抽象方法 abstract 不能有具体的实现
}
接口的使用
1,实现类通过implements关键字来实现这个接口
interface A{
public int age = 10;//数据成员默认是static final
public void fun1();//方法默认是抽象方法 abstract 不能有具体的实现
}
//接口的实现
class C implements A{
@Override
public void fun1() {//实现接口中的方法
// TODO Auto-generated method stub
System.out.println("fun1!!!1");
}
}
2,可以实现多个接口
interface A{
public int age = 10;//数据成员默认是static final
public void fun1();//方法默认是抽象方法 abstract 不能有具体的实现
}
interface B{
int b = 100;
public void fun2();
}
//接口的实现,可以实现多个接口
class C implements A,B{
@Override
public void fun1() {//实现接口A的方法
// TODO Auto-generated method stub
System.out.println("fun1!!!1");
}
@Override
public void fun2() {//实现接口B的方法
// TODO Auto-generated method stub
System.out.println("fun1!!!2");
}
}
3,接口不能通过new来进行实例化(可以通过向上转型)
public static void main(String[] args) {
C c = new C();//看做它是一个派生类
c.fun1();
c.fun2();
A a = new C();
a.fun1();
B b = new C();
b.fun2();
}
4,
在Java中,一个抽象类只能继承一个抽象类,但一个接口却可以使用extends关键字同时继承多个接口(但接口不能继承抽象类)。
interface A{
public void fun1();
}
interface B{
public void fun2();
}
//接口和接口之间也可以继承
interface C extends A,B{
public void fun3();
}
class D implements C{
@Override
public void fun1() {
// TODO Auto-generated method stub
}
@Override
public void fun2() {
// TODO Auto-generated method stub
}
@Override
public void fun3() {
// TODO Auto-generated method stub
}
}
(1)一个抽象类只能继承一个抽象父类,而接口可以继承多个接口;
(2)一个子类只能继承一个抽象类,却可以实现多个接口(在Java中,接口的主要功能是解决单继承局限问题)
5,接口可以继承接口,并且可以继承不只一个接口,但是不能实现接口。因为接口的成员方法都具有抽象属性,不具有方法体,无法实现继承的接口。
6, * 接口和抽象类的区别
* 接口可以实现(继承--> 解决了Java单继承的问题)多个,类只能继承一个
* 抽象类可以拥有非抽象方法,而接口内都是抽象方法
* 接口的数据成员变量都是public static final
* 接口是对行为的一种抽象,抽象类是对类整体的抽象
接口的例子
/**
*
* @author wj
*例:模拟银行存取款
1、 创建基接口BankAccount,包含 存款方法playIn(),取款方法withdraw(),查询余额方法getBalance()。
2、 创建接口ITransferBankAccount(继承基接口BankAccount),包含转账方法transferTo().
3、 创建类CurrentAccount(实现基接口ITransferBankAccount),类中包含私有数据成员:名字name和余额balance
,并实现存款方法:playIn(),取款方法:withdraw(),查询余额getBanlance(),银行转账方法transferTo(),
重载方法toString()方法,该方法返回银行当前账户中的余额。
4、 主函数中:拥有两个账户:分别为曹操和刘备,(1):曹操存款1000,刘备存款2000。
(2):刘备向曹操转账1元钱,返回两个账户当前的余额。
*/
interface BankAccount{
void playIn(int money);
void withdraw(int money);
int getBalance();
}
interface ITransferBankAccount extends BankAccount{
void transferTo(CurrentAccount ca,int money);
}
class CurrentAccount implements ITransferBankAccount{
private String name;
private int balance;
public CurrentAccount(String name, int balance) {
super();
this.name = name;
this.balance = balance;
}
@Override
public void playIn(int money) {
// TODO Auto-generated method stub
this.balance = this.balance+money;
}
@Override
public void withdraw(int money) {
// TODO Auto-generated method stub
this.balance = this.balance-money;
}
@Override
public int getBalance() {
// TODO Auto-generated method stub
return balance;
}
@Override
public void transferTo(CurrentAccount ca,int money) {
// TODO Auto-generated method stub
ca.balance = ca.balance+money;
this.balance = this.balance-money;
}
}
public class Test5 {
public static void main(String[] args) {
CurrentAccount caocao = new CurrentAccount("caocao",0);
CurrentAccount liubei = new CurrentAccount("liubei",0);
caocao.playIn(1000);
liubei.playIn(2000);
liubei.transferTo(caocao, 1);;
System.out.println("caocao balance :"+caocao.getBalance());
System.out.println("liubei balance :"+liubei.getBalance());
}
}
运行结果