zoukankan      html  css  js  c++  java
  • java基础--接口

    1、生活中的接口:

          1)电脑厂商留的USB接口-------------制定标准、规范

                 U盘、键盘、鼠标厂商-------------遵守标准、规范

          2)国家对开发商--------------------制定标准、规范

                       开发商---------------------遵守标准、规范

    2、 JAVA中的接口:

      定义:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,

                      因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具 有不同的行为(功能)。

      1)是一个标准、规范,遵守,遵守了这个标准就能干某件事

      2)由interface定义

      3)只能包含常量和抽象方法

     1 interface Inter1{
     2     public static final int NUM = 5;
     3     public abstract void show();
     4     
     5     double PI = 3.14159;    //默认public static final
     6     void sayHi();           //默认public abstract
     7     
     8     //  int num;                   //编译错误,没有赋值
     9     //  public static sayHi(){}    //编译错误
    10 }

      4)接口不能被实例化

      5)接口是需要被实现/继承的,实现类/子类

         必须重写接口中的所有抽象方法

      6)一个类可以实现多个接口,用逗号分隔

                若又继承又实现时,应先继承后实现

     1 interface Inter2{
     2     void a();
     3 }
     4 interface Inter3{
     5     void b();
     6 }
     7 abstract class Aoo{
     8     abstract void c();
     9 }
    10 class Boo extends Aoo implements Inter2,Inter3{
    11     public void a(){}
    12     public void b(){}
    13     void c(){}
    14 }

      7)接口可以继承接口

        继承和实现的理解:

                类对类---------------继承

                         接口对接口--------------继承

             类和接口--------------实现

     1 interface Inter2{
     2     void a();
     3 }
     4 interface Inter3 extends Inter2{
     5     void b();
     6 }
     7 class Aoo implements Inter2{
     8     public void a(){}
     9     public void b(){}
    10 }

    3、接口的小例子:

                这里简单写了一个银行卡系统的接口小例子,此案例按如下步骤进行。

        步骤一:定义银联接口

          首先,定义名为 UnionPay 的银联接口,用于描述银联统一指定的规则;然后在该接口中定义

          getBalance 方法表示获取余额功能,定义 drawMoney 表示取钱功能,定义 checkPwd 表示检查

             密码功能,代码如下所示:

     1 /*
     2  * 接口,用于描述银联统一制定的规则
     3  */
     4 public interface UnionPay {
     5     //查看余额
     6     public double getBalance();
     7     //取钱
     8     public boolean drawMoney(double number);
     9     //检查密码
    10     public boolean checkPwd(String input);
    11 }

        步骤二:定义工商银行接口

          定义名为 ICBC 的接口表示工商银行接口,用于描述中国工商银行发行的卡片功能,该接口

          需要满足银联接口的功能,因此继承银联接口;该接口在具备银联接口的功能上,要求增加

            在线支付功能,所以在该接口中定义 payOnline 方法,表示此功能,代码如下:  

    1 public interface ICBC extends UnionPay{
    2     //增加在线支付功能
    3     public void payOnline(double number);
    4 }

        步骤三:定义农业银行接口

                  该接口在具备银联接口的功能基础上要求增加支付电话费功能,所以在该接口中定义

                  payTelBill 方法,表示此功能,代码如下:

    1 public interface ABC extends UnionPay{
    2     //增加支付电话费的功能
    3     public boolean PayTelBill(String phoneNum,double sum);
    4 }

        步骤四:定义工商银行接口的实现类

        首先,定义  ICBCImpl  的类,该类实现  ICBC 接口;另外,分析问题中的取钱功能,需要

        对余额信息进行存储,插入卡片后需要输入密码后才能进行取钱,因此,在该类中定义 double

        类型属性 money 表示账户余额以及 String 类型属性 pwd 表示密码,代码如下:

     1 public class ICBCImpl implements ICBC{
     2     private double money;
     3     private String pwd;
     4     
     5     public ICBCImpl(double money,String pwd){
     6         this.money = money;
     7         this.pwd = pwd;
     8     }
     9     
    10     @Override
    11     public double getBalance(){
    12         return money;
    13     }
    14     
    15     @Override
    16     public boolean drawMoney(double number){
    17         if(number <= money){
    18             money -= number;
    19             return true;
    20         }
    21         return false;
    22     }
    23     
    24     @Override
    25     public void payOnline(double number){
    26         if(number < money){
    27             money -= number;
    28         }
    29     }
    30     
    31     @Override
    32     public boolean checkPwd(String input){
    33         if(pwd.equals(input)){
    34             return true;
    35         }else{
    36             return false;
    37         }
    38     }
    39     
    40 }

        步骤五:定义农业银行接口的实现类:

        实现农业银行接口的实现过程与工行相似,实现过程中注意,农行卡内的余额可以透支

        2000,代码如下所示:

     1 public class ABCImpl implements ABC{
     2     //卡内余额,允许最多透支2000
     3     private double balance;
     4     //账号密码
     5     private String password;
     6     
     7     public ABCImpl(double balance,String password){
     8         this.balance = balance;
     9         this.password = password;
    10     }
    11     
    12     @Override
    13     public double getBalance(){
    14         return balance;
    15     }
    16     
    17     @Override
    18     public boolean drawMoney(double number){
    19         if(balance - number >= -2000){
    20             balance -= number;
    21             return true;
    22         }
    23         return false;
    24     }
    25     
    26     @Override
    27     public boolean checkPwd(String input){
    28         if(password.equals(input)){
    29             return true;
    30         }else{
    31             return false;
    32         }
    33     }
    34     
    35     @Override
    36     public boolean PayTelBill(String phoneNum,double sum){
    37         if(phoneNum.length() == 11 && (balance - sum) >= -2000){
    38             balance -= sum;
    39             return true;
    40         }
    41         return false;
    42     }
    43 }

        步骤六:测试

        新建 TestUnionPay 类,测试银联接口提供的方法是否成功实现,代码如下所示(农业银行测试代码相似):

     1 import java.util.Scanner;
     2 public class TestUnionPay {
     3     public static void main(String[] args) {
     4         UnionPay icbc = new ICBCImpl(2000,"123456");
     5         
     6         Scanner input = new Scanner(System.in);
     7         System.out.println("请输入密码:");
     8         if(icbc.checkPwd(input.next())){
     9             System.out.println("请输入金额:");
    10             double num = Double.parseDouble(input.next());
    11             
    12             if(icbc.drawMoney(num)){
    13                 System.out.println("取款成功,卡内余额为:"+icbc.getBalance());
    14             }else{
    15                 System.out.println("取款失败!");
    16             }
    17         }else{
    18             System.out.println("密码错误!");
    19         }
    20         input.close();
    21     }
    22 
    23 }

        测试结果如下:

  • 相关阅读:
    Google app engine python 2.5.4 安装ssl
    Ubuntu 10.04分辨率
    Google Voice 国内用户开通全攻略(图文)
    (linux)查看及修改文件权限以及相关
    InstallAnyWhere使用笔记制作升级补丁时的一些判断
    openoffice 编译依赖关系履历
    匹配连续的任意字词
    BT3 无线密码
    All roads lead to Rome, some smooth, some rough.
    test
  • 原文地址:https://www.cnblogs.com/tg666/p/9195504.html
Copyright © 2011-2022 走看看