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 }

    测试结果如下:

 

posted @ 2018-06-18 16:45  mCod  阅读(249)  评论(0编辑  收藏  举报