接口

首先,接口不是一个类。是对类的一组需求描述,这些类需要遵循接口描述的同一格式进行定义。接口包含常量和方法的定义,而没有变量和方法的实现。

在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击

这时候,就可以使用接口来实现这个效果。

接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们就一定能够进行物理攻击。
      

public interface AD {
        //物理伤害
    public void physicAttack();
}


   意思是,任何实现AD接口的类都需要包含physicAttack()方法

注意:

1.接口可以用public 修饰 或 省略,省略时默认default,只有相同包可以访问

2.接口中的所有方法自动属于public abstract。接口中声明方法时,不必提供关键字.
     
  接口也可以包含多个方法,还可以定义常量。接口不能含有实例域,也不能在接口中实现方法。这些都应该由实现接口的那个类来完成。所以说,可以将接口看成是 没有实例域的抽象类。但其实两者间有一定区别。
   

让类实现一个接口的步骤:
1)将类声明为实现给定的接口(implements)。
2)对接口中的所有方法进行定义。

public class ADHero extends Hero implements AD{
 
    @Override
    public void physicAttack() {   //实现时方法必须用public
        System.out.println("进行物理攻击");
    }
 
}

 为什么不在ADHero类中直接提供一个physicAttack()方法,而必须实现AD接口呢?

 因为调用方法时,编译器先检查这个方法是否存在,又每一个实现AD接口的类都必须提供这个方法的定义,所以可以确保拥有compareTo方法。

        JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴是一种应该受到保护的东西”,金丝猴从“应该受到保护的东西”这个类继承。这样金丝猴可以同时从 “动物类”、“值钱的东西类”、“应该受到保护的东西” 这三个类继承,但由于JAVA只支持单继承,因此金丝猴只能从这三个类中的一个来继承,不能同时继承这三个类。因此为了封装现实生活中存在的多重继承现象,为了实现多继承,可以把其中的两个类封装成接口。使用接口可以帮助我们实现多重继承。

接口:
1.多个无关的类可以实现同一个接口(接口本质是一种特殊的抽象类,可以被多个无关的类继承)
2.一个类可以实现多个无关的接口(一个类通过实现多个接口来做到多重继承)

接口定义举例:


public interface Runner {
    public static final int id = 1;
    
    public void start();
    public void run();
    public void stop();
}

接口(interface)是一种特殊的抽象类,在这种抽象类里面,所有的方法都是抽象方法,并且这个抽象类的属性(即成员变量)都是声明成“public static final 类型 属性名”这样的,默认也是声明成“public static final”即里面的成员变量都是公共的、静态的,不能改变的因此在接口里面声明常量的时候,可以写成“public static final 类型 常量名=value(值)”这样的形式,也可以直接写成“类型 常量名=value(值)如:“public static final int id=10”可以直接写成“int id=10”这样的形式,因为在接口里面默认的属性声明都是“public static final”的,因此“public static final”可以省略不写。在接口里面声明的抽象方法可以不写abstract关键字来标识,因为接口里面所有的方法都是抽象的,因此这个“abstract”关键字默认都是省略掉的,如在一个接口里面声明这样的三个方法:“public void start()”、“public void run()”、“public void stop()”这三个方法前面都没有使用abstract关键字来标识,可它们就是抽象方法,因为在接口里面的声明的方法都是抽象方法因此在接口里面的抽象方法都会把abstract关键字省略掉,因为默认声明的方法都是抽象的,所以就没有必要再写“abstract”字了,这一点与在抽象类里面声明抽象方法时有所区别,在抽象类里面声明抽象方法是一定要使用“abstract”关键字的,而在接口里面声明抽象方法可以省略掉“abstract”。作为接口来说,一个类可以从接口继承(或者叫实现接口),这也是多继承,接口里面的成员变量不专属于某个对象,都是静态的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也就实现了多重继承,而且又避免了多重继承容易出现问题的地方,这就是用接口实现多重继承的好处。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值