zoukankan      html  css  js  c++  java
  • Java 面向对象程序设计 接口

    接口(interface)是用来实现类间多重继承功能的一种结构。它定义了若干个抽象方法和常量,形成一个属性集合,该属性集合通常对应了某一组功能。
    凡是需要实现这种特定功能的类,都可以继承并使用它。一个类只能直接继承一个父类,但可以同时实现若干个接口。实现(或继承)接口实际上就获得了多个特殊父类的属性,即实现了多重继承。

    1.接口与继承

    接口定义的仅仅是实现某一特定功能的一组对外的协议和规范,而并没有真正地实现这个功能。这些功能的真正实现是在继承这个接口的各个类中完成的。

    因为接口包含的是未实现的一些抽象的方法,它与抽象类有些相象。它们之间存在以下的区别:

    • 接口不能有任何实现了的方法,而抽象类可以。
    • 类可以继承(实现)许多接口,但只能继承一个父类。
    • 类有严格的层次结构,而接口没有层次结构,没有联系的类可以实现相同的接口。

    2.接口的定义

    接口是由常量和抽象方法组成的特殊类。接口的定义包括两个部分:接口声明和接口体。声明接口一般格式如下:

    [public] interface 接口名 [extends 父接口名表 ] {
        域类型  域名=常量值;    //常量域声明
        返回值  方法名(参数表);    //抽象方法声明
    }

    接口声明中有两个部分是必需的:interface关键字和接口的名字。用public修饰的接口是公共接口,可以被所有的类和接口使用;没有public修饰符的接口则只能被同一个包中的其他类和接口利用。
    接口也具有继承性,子接口可以继承父接口的所有属性和方法,同时一个子接口可以继承多个父接口。

    3.接口的实现

    定义接口是为了让某些类实现它。 一个类实现某个接口,要在类的声明中要包括一条implements语句,并提供在接口中定义的所有抽象方法的具体实现。
    一个类可以实现多个接口,可以在implements后面列出要实现的多个接口,这些接口以逗号分隔。

    interface calculate{
        int number = 100;
        void add(int s,int b);
        void mul(int a,int b);
    }
    public class TheInterface implements calculate{
        @java.lang.Override
        public void add(int s, int b) {
            System.out.println(s+b);
        }
    
        @java.lang.Override
        public void mul(int a, int b) {
            System.out.println(a*b);
        }
        public static void main(String[] args) {
            TheInterface myinterface = new TheInterface();
            myinterface.add(1,3);
            myinterface.mul(55,1);
            System.out.println(myinterface.number);
        }
    }
    //输出
    //4
    //55
    //100

    实现接口时应注意的问题:
    (1)在类的声明部分,用implements关键字声明该类将要实现哪些接口。
    (2)类在实现抽象方法时,必须用public修饰符。
    (3)除抽象类以外,在类的定义部分必须为接口中所有的抽象方法定义方法体,且方法首部应该与接口中的定义完全一致。
    (4)若实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。但是对于这个抽象类的任何一个非抽象子类,不允许存在未被实现的接口方法。即非抽象类中不能存在抽象方法。

    接口的实例

    interface Shape2 {
        public abstract double computeArea();
    }
    class Circle2 implements Shape2 {
        double radius;
        String type = "Circle";
    
        public Circle2(double _radius) {
            radius = _radius;
        }
        public double computeArea() {
            return Math.PI * radius * radius;
        }
        void Circle2(){
            System.out.println(computeArea());
        }
    }
    class Rectangle2 implements Shape2 {
        double width, height;
        String type = "Rectangle";
        public Rectangle2(double _width, double _height) {
            width = _width;
            height = _height;
        }
        public double computeArea() {
            return width * height;
        }
        void Rectangle2(){
            System.out.println(computeArea());
        }
    }
    public class ShapeTestWithInterface {
        public static void main(String args[]) {
            Circle2 c1 = new Circle2(2);
            Rectangle2 r1 = new Rectangle2(2,2);
            c1.Circle2();
            r1.Rectangle2();
        }
    }
  • 相关阅读:
    SignalR + MVC5 简单示例
    SignalR 简单示例
    Web API 简单示例
    Windows Azure 使用体验
    SQL Server 2014 安装小记
    SSRS 迁移
    SSH配置(同一服务器不同用户)
    【6】Zookeeper脚本及API
    【3】Kafka安装及部署
    【2】Kafka概念及原理
  • 原文地址:https://www.cnblogs.com/JZN-dhy/p/13444931.html
Copyright © 2011-2022 走看看