zoukankan      html  css  js  c++  java
  • 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义

    抽象方法本质上是定义接口规范。

    • 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法。
    public abstract class Person{
        public abstract void run();
    }
    public class Student extends Person{
        @Override
        public void run(){}
    }
    public class Teacher extends Person{
        @Override
        public void run(){}
    }
    

    如果一个抽象类没有字段,所有方法全部是抽象方法,就可以把抽象类改写为接口interface。

    • Java中使用interface声明一个接口
    • 接口定义的方法默认是public abstract,不需要再写public abstract。
    • 一个类实现interface使用implements
    • 可以实现多个接口
    • 一个interface可以继承自另一个interface

    1.1定义接口

    public interface Person{
        public abstract void run();
    }
    public class Student implements Person{
        @Override
        public void run(){}
    }
    public class Teacher implements Person{
        @Override
        public void run(){}
    }
    

    1.2一个类实现多个接口

    public interface Auto{}
    public interface Type{}
    public class Produce implements Auto,Type{}
    

    1.3一个interface可以继承自另一个interface

    interfaces继承自interface使用的extends,相当于扩展了接口的方法

    public interface Person{
        String getName();
    }
    public interface Student extends Person{
        String getSchool();
    }
    public class PrimaryStudent implements Person{
        @Override
        public String getName(){...}
        @Override
        public String getSchool(){...}
    }
    

    1.4.实例

    Shape.java

    public interface Shape {
        //抽象方法,用于计算面积
        double area();
        //不想在每个类中都实现perimeter方法,可以将该方法定义为default方法
        default double perimeter(){
            return 0;
        };
    }
    

    Rect.java

    public class Rect implements Shape{
        private final double width;
        private final double height;
        public Rect(double width, double height){
            this.height = height;
            this.width = width;
        }
        @Override
        public double area() {
            return width * height;
        }
    }
    

    Circle.java

    public class Circle implements Shape{
        private double radius;
        public Circle(double radius){
            this.radius = radius;
        }
        @Override
        public double area() {
            return Math.PI * radius * radius;
        }
    }
    

    Hello.java

    public class Hello {
        public static void main(String[] args){
            Shape s1 = new Rect(200,100);//可以用接口类型声明实例
            Shape s2 = new Circle(60);
            System.out.println(s1.area());
            System.out.println(s2.area());
        }
    }
    
    合理设计interface和abstract class的继承关系 * 公共逻辑放在abstract class * 接口层次代表抽象程度

    2.接口和编程接口的区别

    注意区分术语: * Java的接口特质interface定义的接口,只定义方法签名 * 编程接口泛指接口规范,如方法签名,数据格式,网络协议等

    3.抽象类和接口的区别

    abstract class interface
    继承 只能extends一个class 可以implements多个interface
    字段 可以定义实例字段 不能定义实例字段
    抽象方法 可以定义抽象方法 可以定义抽象方法
    非抽象方法 可以定义非抽象方法,即普通的实例方法 不能定义非抽象方法,但可以定义default方法

    4.总结

    • 接口定义了纯抽象规范
    • 类可以实现多个接口
    • 接口也是数据类型,适用于向上转型和向下转型
    • 接口不能定义实例字段
    • 接口可以定义default方法(JDK >= 1.8)
  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/csj2018/p/10274685.html
Copyright © 2011-2022 走看看