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)
  • 相关阅读:
    用一个变量表示 ----------"序号,名称,价格"
    11.3 字典复习
    python闭包使用
    Selenium with Python使用心得
    laravel队列使用
    display:inline-block笔记
    python mysql设置当前连接默认的字符集
    lavavel门面(facade)分析
    系统软件漏洞修复最佳实践
    记一次浮点数比较
  • 原文地址:https://www.cnblogs.com/csj2018/p/10274685.html
Copyright © 2011-2022 走看看