Java之接口

接口的概念:
在Java中,除了抽象类之外,还有比它更为抽象的一种技术,接口技术用于描述类具有什么功能,但并不给出具体的实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则,标准。

Java中接口的定义与使用:
定义接口可以使用关键字interface:

interface 接口名称 {
   }

对于接口的使用,与抽象类相似的一点,就是他们都不能直接创建实例,需要定义子类来实现。类和接口是实现关系,用implements创建。

class 类名 implements 接口名

上述代码表示某类实现于某接口。
另外,接口的子类,也叫实现类,可以是普通类,当然也可以使抽象类。

接口与继承:
接口之间可以实现简单的单继承,也有相对复杂的多重继承关系。

接口 extends 接口A,接口B,接口C,接口.... 

分清继承和实现的关系:
在Java中,继承体现的是"is a"的关系,父类中定义共性的内容,而实现体现的是"like a"的关系,接口中定义扩展功能。

接口的成员特点:
1.接口中只有成员常量,没有成员变量。成员常量,就是指他的值一旦确定,不可以二次更改,否则会报错。
在定义常量时,可以直接如下方式进行定义,也是对的。

public interface USB{
   
	int ID = 1001011;
	}

当然,如果你这样定义,也没错!

public interface USB{
   
	public static final int ID = 1001011;
		}

之所以这样,是因为JavaJDK中本来就定义了默认的public static final关键字的修饰,即使你不写,系统会默认加上,相反,如果手动加上了,那么系统不再进行默认操作。因此,我们一般都直接使用第一种写法,简单快捷。

接口的成员方法:
由于JavaJDK版本的不同,对接口的成员方法的定义也是逐渐优化和增多,方便各种各样灵活的需求。下面简单根据JDK版本进行不同的演示。
1.JDK7之前:只有抽象成员方法

public abstract 返回值类型 方法名();

2.JDK8中多了一下两种写法:静态和默认成员方法

public static 返回值类型 方法名();
public default 返回值类型 方法名();

3.在后续的JDK9中,增加了私有的成员方法:

public private 返回值类型 方法名();

特别的: 接口中没有构造方法
为什么呢?
其实,前面就有讲到,接口是不允许实例化的,而构造方法就是用来实例化的一种手段,既然不能实例化,也没有需要初始化的成员(怎么理解?接口中只有成员常****量啊,对比一下前面的类和对象中的成员与构造方法的关系就明白了,为什么没有需要初始化的输成员。)那么就没必要多出构造方法来,不然就成抽象类了。

下面通过一个简单的例子,帮助理解接口的定义与使用:
我们假设所有枪械的设计研发都有一个特定的研发规则,那么我可以
首先定义一个接口gun,表示一切枪械的规则。

package OOP_多态;/* *@Author:Tstr *@Date:2020/8/16 21:54 *@from:lenovo *@e-mail:x20135201314boy@126.com */
/*定义接口gun*/
public interface GUN {
   
    //假设弹夹容量最大上限为400发
    int BULLET = 400;
    double BULLET_TYPE1 = 5.56;
    double BULLET_TYPE2 = 7.62;
    String NAME1 = "步枪小王子";
    String NAME2 = "步枪大佬";

    //定义方法,自我介绍
    public abstract void self_introdution();
    public static void result(){
   
        System.out.println("设计符合规则!!");
    }
}

定义实现类:1

/*定义一个实现类:AK类实现于接口GUN*/
public class AK implements GUN{
   
    @Override
    public void self_introdution() {
   
        System.out.println("我是"+NAME2+"AK,我有"+BULLET+"发"+BULLET_TYPE2+"子弹");
    }
    public AK() {
   
        super();
    }

}

定义实现类2:

/*定义一个实现类:m416类实现于接口GUN*/
public class M416 implements GUN {
   
    @Override
    public void self_introdution() {
   
        System.out.println("我是"+NAME1+"m416,我有"+BULLET+"发"+BULLET_TYPE1+"子弹");
    }
    public M416() {
   
        super();
    }
}

定义测试类:

/*测试类*/
public class GUNTest {
   
    public static void main(String[] args) {
   
        //多态创建实例,测试AK实现类和m416实现类。
        GUN gun = new AK();
        gun.self_introdution();
        GUN.result();
        GUN gun1 = new M416();
        gun1.self_introdution();
        GUN.result();
    }
}

测试结果展示:

end-------------------------------------------------------------------------------------------------------

全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务