📜  Java中的接口类型

📅  最后修改于: 2022-05-13 01:55:43.546000             🧑  作者: Mango

Java中的接口类型

在Java中,接口是一种类似于类的引用类型,它只能包含常量、方法签名、默认方法和静态方法,以及 ts 嵌套类型。在接口中,方法体只存在于默认方法和静态方法中。编写接口类似于编写标准类。不过,类描述属性和内部行为对象,接口包含类实现的行为。另一方面,除非实现接口的类是纯抽象的,并且所有接口方法都需要在给定的可用类中定义。

接口类似于以下方式的类:

  1. 一个接口可以在该接口中包含任意数量的方法。
  2. 接口名称写在带有 –(. Java扩展名)的文件中,接口名称必须与该Java程序的文件名称匹配。
  3. 给定接口的字节码将在 – .class 文件中创建。
  4. 接口出现在包中,它们对应的字节码文件必须同样位于与包名匹配的结构中。

如何声明接口?

interface 关键字用于声明接口。这里我们有一个声明接口的简单例子。

Java
public interface NameOfTheinterface
{
 
  // Any final, static fields here
 
  // Any abstract method declaration here
 
}
//This is Declaration of the interface


Java
// This is Program To implement the Interface
interface car
{
   void display();
}
 
class model implements car
{
   public void display()
   {
    
       System.out.println("im a Car");
                     // the code output will print "im a car"
   }
 
  public static void main(String args[])
  
    {
   model obj = new model();
   obj.display();
    }
}


Java
// This is Program To implement the Functional Interface
 
interface Writable
{ 
    void write(String txt); 
} 
        // FuninterExp is a Example of Functional Interface
   public class FuninterExp implements Writable
    { 
           public void write(String txt)
        { 
            System.out.println(txt); 
        } 
         
     public static void main(String[] args)
     { 
        FuninterExp obj = new FuninterExp(); 
        obj.write(" GFG - GEEKS FOR GEEKS "); 
     } 
}


Java
// Simple Example to understand marker interface
 
public interface interface_name 
   
    { 
         // empty
    }


Java
// This is Program To implement the Cloneable Interface
 import java.lang.Cloneable;
 
 
 class abc implements Cloneable
// Here The abc is a class constructor
{
    int x;
    String y;
    // Here The abc is a class constructor
    public abc(int x,String y)
    {
        this.x = x;
        this.y = y;
    }
     
    protected Object clone()
    throws CloneNotSupportedException
     
    {
        return super.clone();
    }
}
 
    public class Test
 {
        public static void main(String[] args)
             throws CloneNotSupportedException
         {
           
        abc p = new abc(10, "We Are Reading GFG Now");
        abc q = (abc)p.clone();
 
        System.out.println(q.x);
        System.out.println(q.y);
           
        }
 }


接口的属性

接口具有以下属性:

  • 接口是隐含的纯抽象。
  • 声明接口时不需要使用 abstract 关键字
  • 接口中的每个方法也是隐式抽象的,所以不需要 abstract 关键字
  • 接口中的方法在其中隐式公开

示例:文件名 - 汽车。Java

Java

// This is Program To implement the Interface
interface car
{
   void display();
}
 
class model implements car
{
   public void display()
   {
    
       System.out.println("im a Car");
                     // the code output will print "im a car"
   }
 
  public static void main(String args[])
  
    {
   model obj = new model();
   obj.display();
    }
}
输出
im a Car

接口类型

  1. 功能接口
  2. 标记界面

一、功能接口:

  • 功能接口是只有一个纯抽象方法的接口。
  • 它可以有任意数量的静态和默认方法,甚至还有Java.lang.Object类的公共方法

当一个接口只包含一个抽象方法时,它被称为功能接口。

功能接口示例:

  • Runnable : 它只包含 run() 方法
  • ActionListener : 它只包含 actionPerformed()
  • ItemListener : 它只包含 itemStateChanged() 方法

现在我们将看到一个功能接口的示例——

例子:

Java

// This is Program To implement the Functional Interface
 
interface Writable
{ 
    void write(String txt); 
} 
        // FuninterExp is a Example of Functional Interface
   public class FuninterExp implements Writable
    { 
           public void write(String txt)
        { 
            System.out.println(txt); 
        } 
         
     public static void main(String[] args)
     { 
        FuninterExp obj = new FuninterExp(); 
        obj.write(" GFG - GEEKS FOR GEEKS "); 
     } 
}
输出
GFG - GEEKS FOR GEEKS 

2. 标记界面:

  • 不包含任何方法、字段、抽象方法和任何常量的接口称为标记接口。
  • 此外,如果接口为空,则称为标记接口。
  • Serializable 和 Cloneable 接口是 Marker 接口的示例。

例如:

Java

// Simple Example to understand marker interface
 
public interface interface_name 
   
    { 
         // empty
    }

标记界面两种替代方案,它们产生与标记界面相同的结果。

1) 内部标志——用于代替 Marker 接口来实现任何特定操作。

2) 注释——通过对任何类应用注释,我们可以对其执行特定的操作。

内置标记接口

Java中有三种类型的内置标记接口。这些都是

  1. 可克隆接口
  2. 可序列化接口
  3. 远程接口

1.可克隆界面

  • Java中的可克隆接口也是属于Java.lang包的 Marker 接口。
  • 它生成具有不同名称的对象的副本(副本)。因此,我们可以在要克隆的类对象的类中实现接口。
  • 它实现了 Object 类的 clone() 方法。

例如:

Java

// This is Program To implement the Cloneable Interface
 import java.lang.Cloneable;
 
 
 class abc implements Cloneable
// Here The abc is a class constructor
{
    int x;
    String y;
    // Here The abc is a class constructor
    public abc(int x,String y)
    {
        this.x = x;
        this.y = y;
    }
     
    protected Object clone()
    throws CloneNotSupportedException
     
    {
        return super.clone();
    }
}
 
    public class Test
 {
        public static void main(String[] args)
             throws CloneNotSupportedException
         {
           
        abc p = new abc(10, "We Are Reading GFG Now");
        abc q = (abc)p.clone();
 
        System.out.println(q.x);
        System.out.println(q.y);
           
        }
 }
输出
10
We Are Reading GFG Now

2.可序列化接口:

  • 它是Java中的标记接口,在Java.io 包中定义。如果我们想让类可序列化,我们必须实现 Serializable 接口。如果一个类实现了 Serializable 接口,我们可以序列化或反序列化该类对象的状态。
  • 序列化是一种机制,其中我们的对象状态从内存中准备好并写入文件或数据库中。
  • 反序列化 - 与序列化相反,意味着从文件或数据库读取对象状态并写回内存称为对象的反序列化。

3.远程接口:

  • 远程接口是属于Java.rmi包的标记接口。它将对象标记为可以从另一台机器的主机访问的远程对象。
  • 如果我们想让一个对象成为远程对象,我们需要实现远程接口。因此,它标识接口。
  • 远程接口用于标识可以从非本地虚拟机调用其方法的接口。任何作为远程对象的对象都必须直接或间接实现此接口。
  • 远程接口是声明将从远程Java虚拟机调用的方法集的接口,即(JVM