zoukankan      html  css  js  c++  java
  • Java面向对象之接口

    内容:

    1、接口的概念与定义

    2、类实现接口

    3、接口的特点

    4、接口和抽象类的区别

    1、接口的概念与定义

    (1)类和接口

    类:具有相同属性和功能的事物集合

    接口:接口是功能的集合,也就是方法的集合,也就是说接口中只能定义方法,不能定义普通的成员变量

    而且接口中的成员方法必须都是抽象的,可以理解接口是比抽象类更加抽象的一种类

    (2)接口的定义

    定义类的关键字:class

    定义抽象类的关键字:abstract

    定义接口的关键字:interface

    定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件,

    这点可以让我们将接口看做是一种只包含了功能声明的特殊类

    格式如下:

    1 public interface 接口名{
    2       // 成员变量: 不能定义普通的成员变量
    3       // 成员方法: 必须都是抽象
    4       public abstract 返回值类型 方法名();
    5 }

    使用interface代替了原来的class,其他步骤与定义类相同:

    • 接口中的方法均为公共访问的抽象方法
    • 接口中无法定义普通的成员变量

    (3)各种类型之间的关系

    • 类和类之间:继承,只能是单继承,一个子类只能有一个父类
    • 接口和接口之间:继承,可以多继承,一个子接口可以有多个直接父接口
    • 类和接口之间:不叫继承,叫实现(implements),可以多实现,一个类可以实现多个接口

    2、类实现接口

    类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements

    其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能

    格式:

    1 class 实现类 implements 接口 {
    2     // 重写接口中所有方法
    3 } 

    在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑

    • 接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备该方法,是功能的声明
    • 在具体实现类中重写方法,实现功能,是方法的具体实现

    于是,通过以上两个动作将功能的声明与实现分开,此时请思考:类是现实事物的描述,接口是功能的集合

    3、接口的特点

    接口中成员的特点如下:

    • 接口中可以定义成员变量,但是变量必须用public static final修饰(固定修饰符),这样的变量其实是常量,其值不能改变
    • 接口中可以定义方法,方法也有固定的修饰符,public abstract
    • 接口不可以创建对象(抽象类也不可以创建对象)
    • 实现类必须覆盖掉接口中所有的抽象方法后,实现类才可以实例化。否则实现类是一个抽象类

    示例代码:

    1 // 接口
    2 public interface MyInter {
    3     // 接口的成员变量(常量)
    4     public static final int a = 3;
    5     // 接口的方法
    6     public abstract void show();
    7 }

    注:固定修饰符可以不写也可以按心情想写哪个写哪个,但是不写不代表没有,不写时编译器会自动添加

    在开发中最常用的模式:

    1 // 一个类继承一个抽象类 同时实现多个接口
    2 public class A extends AbstractClassB implements 接口A, 接口B{
    3 
    4 }

    注:A中必须重写抽象类中的抽象方法以及所有接口中的抽象方法!

    接口的特点:

    • 接口可以继承接口  A接口继承B接口后,A接口便拥有了A、B两个接口中所有的抽象方法
    • Java支持一个类同时实现多个接口,或一个接口同时继承多个接口
    • 类可以在继承一个类的同时,实现多个接口
    • 接口与父类的功能可以重复,均代表要具备某种功能,并不冲突

    4、接口和抽象类的区别

    相同点:

    • 都位于继承的顶端,用于被其他类实现或继承
    • 都不能直接实例化对象
    • 都可以包含抽象方法,其子类都必须覆盖重写或实现这些抽象方法

    区别:

    • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;
    • 接口只能包含抽象方法,而抽象类可以包含抽象方法也可以包含普通方法;
    • 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
    • 抽象类为继承体系中的共性内容,接口为继承体系外的扩展功能

    二者的选用:

    • 优先选用接口,尽量少用抽象类
    • 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类
  • 相关阅读:
    pair<,>
    PTA 5-8 File Transfer (25)
    PTA 5-6 Root of AVL Tree (25)
    PTA 5-5 Tree Traversals Again (25)
    HDU4288 Coder(线段树)
    CodeForces 371D Vessels(树状数组)
    POJ2762 Going from u to v or from v to u(单连通 缩点)
    LightOJ 1030 Discovering Gold(期望 概率)
    HDU5115 Dire Wolf(区间DP)
    HDU4008 Parent and son(树形DP LCA)
  • 原文地址:https://www.cnblogs.com/wyb666/p/10299971.html
Copyright © 2011-2022 走看看