java中判断一个对象是不是实现了某个接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中判断一个对象是不是实现了某个接口相关的知识,希望对你有一定的参考价值。

/*************************************************************************** * 判断对象o实现的所有接口中是否有szInterface * 2008-08-07 修正多继承中判断接口的功能, * 以及修正接口继承后的判断功能 * package test; * * public interface ITest extends Serializable * public class Test1 implements ITest * public class Test2 extends Test1 * public class Test3 extends Test2 * * isInterface(Test3.class, "java.io.Serializable") = true * isInterface(Test3.class, "test.ITest") = true * @param c * @param szInterface * @return */ public boolean isInterface(Class c, String szInterface) Class[] face = c.getInterfaces(); for (int i = 0, j = face.length; i < j; i++) if(face[i].getName().equals(szInterface)) return true; else Class[] face1 = face[i].getInterfaces(); for(int x = 0; x < face1.length; x++) if(face1[x].getName().equals(szInterface)) return true; else if(isInterface(face1[x], szInterface)) return true; if (null != c.getSuperclass()) return isInterface(c.getSuperclass(), szInterface); return false; 参考技术A 使用instanceof 关键字,instanceof是Java的一个二元操作符,是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,也可以测试接口。
public class Test

public static void main(String[] args)

Student student = new Student();
System.out.println(student instanceof Person);



class Student implements Person



interface Person

参考技术B 实际思路:先通过类的getInterfaces方法获取到当前类实现的所有接口(包含父类接口),之后分别与要判断是否实现的接口进行比较,如果返回true的话,表示实现了,否则表示未实现:
举例:
public boolean isInterface(Class c, String szInterface)

Class[] face = c.getInterfaces();//获取类c实现的所有接口
for (int i = 0, j = face.length; i < j; i++)

//判断类接口中是否有与要判断的接口一致
if(face[i].getName().equals(szInterface))

return true;

else

//判断其父类是否实现了这个接口
Class[] face1 = face[i].getInterfaces();
for(int x = 0; x < face1.length; x++)

if(face1[x].getName().equals(szInterface))

return true;

else if(isInterface(face1[x], szInterface))

return true;




if (null != c.getSuperclass())

//递归,依次判断是否实现父类接口
return isInterface(c.getSuperclass(), szInterface);

return false;
参考技术C 如果对象的类为XXX 实例化名称为xxx 接口名为YYY
XXX xxx = new XXX();
可以用 xxx instanceof YYY来判断
if(xxx xxx instanceof YYY)
...
参考技术D 用这个来判断就可以了:a instanceof b
a是否是b的实例。

Java基础——接口

如果类要遵从某个接口,那么就履行这项服务。

接口不是类,这是两个不同的概念。接口是类的需求的描述

接口的特性:

  1. 接口不能实例化,但是可以声明一个接口变量用于存储接口实现类的对象。
  2. 可以使用instanceof关键字判断某个接口变量是否是某个接口的变量
  3. 接口也可以继承

创建一个接口

modified interface name
    //常量
    [public static final] field;
    //方法(无实现)
    [public abstract] methods;

接口中的内容可以分为两部分:

  1. 常量
  2. 方法

在Java8之前,不可以在接口中实现方法,也就是说,接口中的方法没有方法体。接口中所有方法的实现都必须在接口的实现类中进行。

从Java8开始,这种情况出现改变。可以通过将方法声明为static和default实现。在接口的实现类中不需要重写这两类方法。

interface A 
    public static A get();
    default A gets();

接口的实现类

接口不能实例化,也就是说,接口不能创建对象。接口需要通过相应的实现类来证明自己的价值:

class Name implements Iname
    //必须实现接口中的方法

一个类可以实现多个接口

class A implements Comparable, Cloneable
    

实现类需要重写接口的所有方法,否则该实现类必须声明为abstract

命名冲突

  1. 如果某一个类实现了两个接口,这两个接口有相同的默认方法,那么实现类会使用哪个接口的方法?

只要有一个接口定义了默认方法,那么实现类必须重写方法

  1. 如果某个类实现的接口和所属的超类发生方法名冲突,那么类会继承哪一个方法?

类优先原则,继承并使用超类的方法

以上是关于java中判断一个对象是不是实现了某个接口的主要内容,如果未能解决你的问题,请参考以下文章

如何判断某个对象的类型继承于某一接口或父类

如何判断Class c,c是某个接口的实现类

Java基础——接口

Java基础——接口

Java基础——接口

Delphi判断某个类是否实现了某个接口