java基础内容笔记--接口

【注意,本人小白一个,以下是个人根据教程的理解,如有疑惑,出错的地方,希望大家能够留言指出来,相互学习进步。】

接口

        当看到这个词的时候,给我的感觉是接入的一个端口,类似于电源插座和插头的感觉,看了教程和网上的一些介绍后,个人理解接口是一个没有内容只有外皮的一个皮囊。打一个比方,类似与电脑机箱,电脑的机箱有很多中规格,有小的机箱(可以放一张显卡),有中的机箱(可以放两张显卡),有大的机箱(可以放三张显卡),每种机箱的大小不同,里面可以放的东西也都不同,但是有个特点,它们只是机箱,是没有其他的硬件的,当你需要什么配置的时候,根据配置来选择不同的机箱,实现出你想要的结果。当然这个比喻不是很恰当,也有很多的漏洞,所以仅供参考。

         根据教程中,我理解到的接口使用场景是把公共的部分放到接口里面,其他类需要调用就调用接口,这个和继承很想,具体区别在后面会提到。

首先,接口的定义是要用关键字“interface”来定义。

修饰符 interface 接口名
{//接口内容
//声明变量
类型 变量名;
……
//声明方法
返回值类型 方法名();
……
}

接口的定义要注意以下几点:

1)接口的修饰符只能为默认的(无修饰符)或者“public”来修饰。当修饰符是默认时,接口是包可见的,在接口所在的包之外的类不能使用接口。修饰符为“public”时,任何类都可以使用该接口。

2)接口的名字应该符合Java对标识符的规定

3)接口内可以声明变量,接口内的变量被自动设置为共有的、静态的、最终的字段。

4)接口定义的方法都为抽象,它们被自动地设置为“public”

5)接口也被保存为“.java”文件,文件名与类名相同

6)当接口被修饰为“public”的时候,是要单独放到一个文件中,不能与其他的文件共存,如果没有修饰符(无修饰符),就可以一起共存。

如果一个类要使用一个接口,就要用到关键字“implements”

class 类名 implements 接口 1,接口 2
{
  方法 1(){
  //方法体
  }
  方法 2(){
  //方法体
  }
}

有几点要注意:

1)如果实现接口的类不是抽象类,它必须实现接口中定义的所有方法。如果该类为抽象类,在它的子类甚至子类的子类中要实现接口中定义的方法。

2)实现接口的方法时必须使用相同的方法名和参数列表。

3)实现接口类中的方法必须被声明为“public”,因为在接口中的方法都被定义为“public”,根据继承的原则,访问范围只能放大,不能缩小。

例子:

提示:新建一个接口文件,命名为Animal,注意public修饰的接口要新建一个独立的接口文件。


public interface Animal {
	int BIG_TYPE=5;
	void sleep();
	void eat();
	void breath();
}

接口的实现:

public class Tiger implements Mammal {

	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("The tiger sleep");
	}

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("The tiger eat");
	}

	public void breath() {
		// TODO Auto-generated method stub
		System.out.println("The tiger breath");
	}
	public static void main(String[] args){
		Tiger tiger = new Tiger();
		tiger.breath();
		tiger.eat();
		tiger.sleep();
		
	}

	
}

运行结果:

The tiger breath
The tiger eat
The tiger sleep

        可以从例子中看到,接口只是一个皮囊,里面没有实现里面的方法,只是给出了要做什么的一个“口头”方法。要去实现它的“口头”方法,就要去得到这个接口,从而得到里面的方法,从而根据方法来做出实现。

        当类实现的接口是子接口,那实现的方法就必须包含这个子接口及其所继承的父接口的全部方法。

子接口:

public interface Mammal extends Animal {
	void run();
}

实现子接口:



public class Tiger implements Mammal {


	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("The tiger sleep");
	}


	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("The tiger eat");
	}


	public void breath() {
		// TODO Auto-generated method stub
		System.out.println("The tiger breath");
	}
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("The tiger run");
	}
	public static void main(String[] args){
		Tiger tiger = new Tiger();
		tiger.breath();
		tiger.eat();
		tiger.sleep();
		tiger.run();
	}
}

运行结果:

The tiger breath
The tiger eat
The tiger sleep
The tiger run

上面的例子可以看出来,实现子接口,就会实现包含子接口所继承的父接口的全部方法,否则会报错。

按照前面说的,接口常用的场景,范围是创建常量组,而这些常量是固定不变的,又因为接口内的常量,

默认是public static final修饰的,虽然不显示出来,也不用明确的打出来,直接就是(类型)常量名就可以了,所以接口很合适放不变的常量。

例子:

创建一个默认类型的接口,可见范围(包里)

一个类去实现这个接口,实现方法是打印出接口里面的常量


实例化这个time类,调用这个类中的方法


运行结果


抽象类和接口的比较

抽象类和接口是非常相像的,但是它们之间是有区别的,主要的区别有一下几个方面

1)一个类可以实现众多个接口,每个接口用“,”隔开,但是只能继承一个抽象类。可以说接口是取消程序语言中的多继承机制的一个衍生物,但它完全如此。

2)抽象类可以有非抽象方法,即可以有已经实现的方法,继承它的子类可以对方法进行覆写;而接口中定义的方法必须全部为抽象的方法。

3)在抽象类中定义的方法,它们的修饰符可以是public、protected、private,也可以是默认值;但是在接口中定义的方法全是public的。

4)抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过它们来存放子类对象或者是实现类的对象。可以说它们都可以实现多态。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值