JAVA之接口

接口的含义

在Java语言中,接口有两种意思:
●一是指概念性的接口,即指类对外提供的所有服务。类的所有能被其他程序访问的方法构成了类的接口。
●二是指用interface关键字定义的实实在在的接口,也称为接口类型。它用于明确地描述系统对外提供的所有服务,它能够更加清晰地把系统的实现细节与接口分离。

接口的声明

  1. 接口类型,它与抽象类表面.上有些相似,接口类型与抽象类都不能被实例化。
  2. 类实现接口的关键字为implements

接口的语法规则

(1)接口中的成员变量默认都是public、static、final类型的,必须被显式初始化。并且接口中只能包含public、static、final类型的成员变量。

public interface A{
  int v1;  //编译出错,v1变量被看作静态常量,必须被显式初始化
  protected int  v2=0;  //编译出错,v2变量必须是public类型
  int v3=3;   //合法,v3变量默认为public、static、final类型,此处public可不用写
}

(2)允许在接口中定义抽象方法,默认方法和静态方法。默认方法用default关键字来声明,拥有默认的实现。
(3)接口中的方法默认是public类型的,并且必须是public类型的。
(4)接口之间也可以继承
(5)一个类只能继承一个直接的父类,但能实现多个接口。

public class MyApplet extends JApplet implements Runnable, MouseListener{}

比较抽象类与接口

共同点:
都不能被实例化
都可以包含抽象方法,以及包含具体实现的方法
在语义上,都位于系统的抽象层,需要其他类来进一步提供实现细节。
区别:
接口中的成员变量和方法只能是public类型的,而抽象类中的成员变量和方法可以处于各种访问级别。抽象类比接口包含了更多的实现细节
接口中的成员变量只能是public、static和final类型的,而在抽象类中可以定义各种类型的实例变量和静态变量。
一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现多个接口。
在语义上,接口表示更高层次的抽象,声明系统对外提供的服务。而抽象类则是各种具体类型的抽象。

instanceof操作符

instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例。
instanceof操作符左边的操作元是一个引用类型,右边的操作元是一个类名或接口名。形式如下:

Fish fish=new Fish();
System.out.println(fish instanceof XXX);  //XXX表示一个类名或接口名

广泛地讲,一个类的实例包括类本身的实例,以及所有直接或间接的子类的实例,因此当“XXX”是以下值时,instanceof表达式的值为true:
Fish类。
Fish类的直接或间接父类。
Fish类实现的接口。

操作符“==”与对象的equals()方法

==

当操作符“==”两边都是引用类型变量时,这两个引用变量必须都引用同一个对象,结果才为true。

Food fish1=new Fish();
Food fish2=new Fish();
Food fish3=fish1;
System.out.println(fish1 ==fish2);  //打印false
System.out.println(fish1==fish3);  //打印true

在这里插入图片描述

equals()

  1. equals()方法是在Object类中定义的方法,它的声明格式如下: public boolean equals(Object obj)
  2. Object类的equals()方法的比较规则为:当参数obj引用的对象与当前对象为同一个对象,就返回true,否则返回false:
    public boolean equals(Object obj){
    if(this==obj)return true;
    else return false;
    }
Food fish1=new Fish();
Food fish2=new Fish();
Food fish3=fish1;
System.out.println(fish1.equals(fish2));  //打印false
System.out.println(fish1.equals(fish3));  //打印true

在这里插入图片描述
3. 在JDK中有一些类覆盖了Object类的equals()方法,它们的比较规则为:如果两个对象的类型一致,并且内容一致,则返回true。这些类包括:java.io.File、java.util.Date、java.lang.String、包装类(如java.lang.Integer和java.lang.Double类等)。

String str1=new String("Hello");
String str2=new String("Hello");
 
System.out.println(str1==str2);  //打印false
System.out.println(str1.equals(str2));  //打印true

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值