Java接口的艺术:探索接口特性

162 阅读4分钟

在Java的世界里,接口(Interface)是一种强大的抽象机制,它定义了一组方法规范,但不实现这些方法。接口在Java编程中扮演着至关重要的角色,特别是在实现多态和面向接口编程(Interface-Oriented Programming, IOP)方面。本文将深入探讨Java接口的特性、接口实现多态的方式,以及面向接口编程的好处。 接口的特性

完全抽象:接口中的方法默认都是抽象的,它不能包含实现(除非是默认方法或静态方法)。 多继承:Java不允许类继承多个类,但允许一个类实现多个接口,从而实现多继承的特性。 全局访问:接口中的所有方法默认都是public的,它们隐式地定义为public abstract。 类型检查:接口可以作为引用类型,用于引用对象,提供了一种类型检查的机制。 默认方法:从Java 8开始,接口可以包含默认方法,即带有实现的方法。 静态方法:接口也可以包含静态方法,这些方法可以在不实例化接口的情况下直接调用。 package cn.zy.cellphone; /**接口是一种引用数据类型。使用interface声明接口,形式

  • 形式:public interface 接口名称{}
  • 接口不能拥有构造方法,不能用于创建对象 *接口可以多继承。一个接口可以继承多个其他接口 *列如:public interface Broadcast extends Network,Picture{} *Broadcast接口就具备了A、B接口中定义的抽象方法。 */ public interface Broadcast { /**接口中可以声明属性。接口中定义的所有变量都是static final类型的。
    • public static final String version = "1.0"; public int count = 10; // 默认是static final类型 一般很少在接口中声明属性。 */ package cn.zy.cellphone;

public interface Picture { public void picture();//照相 } package cn.zy.cellphone;

public interface Network { public void network();//网络 } package cn.zy.cellphone; /**一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后。

  • public class Photo2 extends Photo implements Network,Picture,Broadcast {}

  • 实现类实现接口,必须实现接口中定义的抽象方法。 *方法即行为,表示一种功能,接口定义了一套功能,实现类必须实现这些功能 –> 实现类的能力得到拓展。 */ //实现类(子类) public class Photo2 extends Photo implements Network,Picture,Broadcast { private String name;

         public String getName() {
             return name;
         }
    
    
         public void setName(String name) {
             this.name = name;
         }
          
    
         public Photo2(String brand, String type, String name) {
             super(brand, type);
             this.setName (name);
      } 
         /**接口中定义的一些系列方法表示的是一种种的能力。接口让实现类实现这些能力,实现类的能力得到拓展和升级。
                                      实现类根据自身特性实现接口中定义的方法。
          * 特殊情况:如果一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。
          */
         public void broadcast() {
             System.out.println(this.getName()+"的手机可以播放");
     }
    
         public void picture() {
             System.out.println(this.getName()+super.getBrand()+super.getType()+"的手机可以照相");
             
         }
    
         
         public void network() {
             
             System.out.println(this.getName()+super.getBrand()+super.getType()+"的手机可以播放上网");    
         }
         /**实现类(子类)Photo2 手机原本只有下面几个功能,通过接口增加了上面几个功能
          * 实现类实现接口,必须实现接口中定义的抽象方法。
            *方法即行为,表示一种功能,接口定义了一套功能,实现类必须实现这些功能 –> 实现类的能力得到拓展。
          */
         
         public void sendInfo() {
             System.out.println(super.getBrand()+super.getType()+"的手机发信息");            
             
         }
    
         
         public void call() {
             System.out.println(super.getBrand()+super.getType()+"的手机可以打电话");                
             
         }
    
         
         public void info() {
             System.out.println(super.getBrand()+super.getType()+"的手机可以发短信");
             
         }
    

} package cn.zy.cellphone; //实现类(子类) public class Photo1 extends Photo implements Broadcast { private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public Photo1() {
super();

}

public Photo1(String brand, String type,String name) {
super(brand,type);
this.setName(name);

}

public void broadcast() {
    System.out.println(this.getName()+"的手机可以播放");

} public void sendInfo(){ System.out.println(super.getBrand()+super.getType()+"的手机发信息"); } public void call(){ System.out.println(super.getBrand()+super.getType()+"的手机可以打电话"); } public void info(){ System.out.println(super.getBrand()+super.getType()+"的手机可以发短信"); }

} package cn.zy.cellphone; //父类 public abstract class Photo { private String brand; private String type; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Photo() { super(); } public Photo(String brand, String type) { super(); this.brand = brand; this.type = type; } public abstract void sendInfo(); public abstract void call(); public abstract void info(); } package cn.zy.cellphone; //执行类 public class Test { public static void main(String[] args) { // 同一引用类型 Broadcast broadcast1=new Photo1("诺基亚","a01","张三"); broadcast1.broadcast();

        Photo photo=new Photo1("诺基亚","a01","张三");
        photo.sendInfo();
        photo.call();
        photo.info();
        // 同一引用类型
        Broadcast broadcast2=new Photo1("苹果X","11S","李四"); 
        broadcast2.broadcast();
        // 实例不同, 对同一方法的执行结果不同
        Picture picture1=new Photo2("苹果X","11S","李四");
        picture1.picture();
        Network network1=new Photo2("苹果X","11S","李四");
        network1.network();
       //多态
        Photo photo1=new Photo1("苹果X","11S","李四");
        photo1.sendInfo();
        photo1.call();
        photo1.info();
        /**
         * 接口实现多态: 接口类型 引用 实现类对象
                                  继 承实现多态: 父类类型 引用 子类对象
                                 接口定义的方法被实现类实现,通过接口引用实现类时,调用接口中的方法时,执行的是实现类实现的方法。
                                   实现类对象具备接口中定义的能力 是一种has a 关系
                                       子类对象是一种父类类型 是一种is a 关系                       
            
                                     现在的Photo1同Photo2既是实现类也是子类
         */

} }