美文网首页
Java 接口

Java 接口

作者: 持续5年输出bug | 来源:发表于2021-08-28 12:24 被阅读0次
    接口

    在Java 中是一个抽象类型,是抽象方法的集合,通常以interface来声明。
    1.一个类通过继承接口的方法从而继承接口的抽象方法
    2.接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
    3.除非实现接口的类是抽象类,否则必须要实现接口中的所有方法。
    4.接口无法被实例化,但是可以被实现 implements关键字
    5.一个类可以在继承一个父类的同时实现多个接口 用逗号分隔即可
    6.接口也可以继承,一个子接口可以同时继承多个父接口

    1.接口的声明

    public interface IPhone {
        /**
         * 拍照接口
         */
       // void photo();  // 两种写法都可以 实际上默认就是 带 public abstract 修饰符的
        public abstract void photo(); // 注意没有方法体
    
    }
    
    

    以下Phone的类重写(实现)了接口IPhone的方法
    注意:此处接口有多少个方法,implements该接口的类就要实现多少个方法

    public class Phone implements IPhone {
        /**
         * 拍照
         * 注意Override重写注解
         */
        @Override
        public void photo() {  // public为默认修饰符
            System.out.println("手机可以拍照");
        }
    }
    

    2.接口的调用

    public class PhoneTest {
        public static void main(String[] args) {
            IPhone ip1 = new Phone();
            // photo()是接口的方法 具体方法实现由Phone这个类中的photo()完成
           // 所以打印结果是 手机可以拍照
           ip1.photo();
        }
    
    }
    

    3.如果不想实现接口中的所有抽象方法,可以将这个类设置为抽象类,最终谁来继承这个类谁就去实现这个方法
    以上代码为例,IPhone为接口 类的继承关系为 SecondPhone 继承Phone类 即

    public interface  IPhone {
        public abstract void photo();
    }
    
    // 注意在此处 abstract 设置Phone为抽象类 不会报错
    public abstract class Phone  implements IPhone {} 
    
    // SecondPhone继承Phone类时 若不重写IPhone接口中的方法 将报错
    public class SecondPhone extends Phone  {}
    
    SecondPhone继承Phone类时 若不重写IPhone接口中的方法 将报错.png

    4.接口中可以包含的常量
    1. 默认 public static final 修饰

    public interface IPhone {
        // int LENGTH; // 要先初始化 否则报错
        // 以下两种定义方法均可
        // int LENGTH=20;
        public static final int LENGTH=20;
    }
    代码块
    

    2.通过接口名.常量名访问

    System.out.println(IPhone.LENGTH); // 测试类中打印
    

    4.接口中的默认方法或静态方法 jdk1.8以后版本
    因为作为具体实现接口的实现类必须要实现所有接口的方法,但是实际开发中可能并不需要全部实现 此时可以通过默认方法或静态方法

    public interface IPhone {
        /**
         * 默认方法
         */
        default void defaultMethod() {
            System.out.println("这是一个默认方法");
        }
    
        /**
         * 静态方法
         */
        static void staticMethod() {
            System.out.println("这是一个静态方法");
        }
    }
    

    此时 实现类 如Phone类可以不用去实现以上两个接口,不会报错
    1.访问这两个方法时,通过接口名.方法名即可或者类名.方法名
    2.默认方法可以在实现类中重写,但是静态方法不可以被重写

    public class PhoneTest {
        public static void main(String[] args) {
            IPhone ip1 = new Phone();
            ip1.defaultMethod();
            IPhone.staticMethod();
        }
    }
    

    相关文章

      网友评论

          本文标题:Java 接口

          本文链接:https://www.haomeiwen.com/subject/puuuiltx.html