定义和实现接口

原创 2012年03月23日 16:49:16

前面说过了接口,但都是一些概念的东西,没有些实际应用,下面就学习下接口的使用吧。

下面开发一个遵循接口继承规范的小例子来说明如何定义和使用接口。这个例子建立在银行账户的基础上。假定编写代码,最终允许在银行账户之间进行计算机转账业务。许多公司可以实现银行账户,但它们都是彼此赞同表示银行账户的所有类都实现接口IBankAccount。该接口包含一个用于存取款的方法和一个返回余额的属性。这个接口还允许外部代码识别由不同银行账户执行的各种银行账户类。我们的目的是允许银行账户彼此通信,以便在账户之间进行转账业务,但还没有介绍这个功能。

首先,需要定义IBank接口:

 

 public interface IBankAccount
{
void PayIn(decimal amount);
bool Withdraw(decimal amount);
decimal Balance
{
get;
}
}

接口的名称为IBankAccount。接口名称传统上以字母I开头,以便知道这是一个接口。

现在可以编写表示银行账户的类了

public class SaverAccount : IBankAccount
{
private decimal balance;
public void PayIn(decimal amount)
{
balance += amount;
}
public bool Withdraw(decimal amount)
{
if (balance >= amount)
{
balance -= amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance
{
get
{
return balance;
}
}
public override string ToString()
{
return String.Format("Venus Bank Saver: Balance = {0,6:C}", balance);
}
}

这个类的实现代码的作用一目了然。其中包含一个私有字段balance,当存款或取款时就调整这个字段。如果因为账户中的金额不足而取款失败,就会显示一个错误消息。

SaverAccount派生于一个接口IbankAccount,我们没有明确指出任何其他基类(当然这表示SaverAccount直接派生于System.Object)。另外,从接口中派生完全独立于从类中派生

SaverAccount派生于IBankAccount,表示它获得了IBankAccount的所有成员,但接口并不实际实现其方法,所以SaverAccount必须提供这些方法的所有实现代码。如果没有提供实现代码,编译器就会产生错误。接口仅表示其成员的存在性,类负责确定这些成员是虚拟还是抽象的(但只有在类本身是抽象的,这些成员才能是抽象的)。在本例中,接口方法不必是虚拟的。

 IBankAccount test = new SaverAccount();

            test.PayIn(700);
            test.Withdraw(600);

  Console.WriteLine(test.ToString());

在这段代码中,一个要点是把引用变量声明为IBankAccount引用的方式。这表示它们可以指向实现这个接口的任何类的实例。但我们只能通过这些引用调用接口的方法-- 如果要调用由类执行的、不在接口中的方法,就需要把引用强制转换为合适的类型。


IBankAccount[] accounts = new IBankAccount[2];
accounts[0] = new SaverAccount();
accounts[1] = new GoldAccount();

java自定义注解接口实现方案

java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.ann...
  • xjbclz
  • xjbclz
  • 2016年09月25日 15:03
  • 1745

Jmeter自定义脚本实例(以项目中阿里云上传接口为例子的需求分析以及实现)

今天来介绍一下Jmeter的Java自定义脚本功能和在项目中的实际例子,因为是实际项目,所以有的接口不可避免的屏蔽掉,但是不影响整体阅读的 :) 背景知识: 在实际写之前,我们需要有jmet...

通过Tag接口实现自定义标签

一、java代码,实现类 package com.want.mytag; import javax.servlet.jsp.JspException; import javax.servlet.j...
  • tao_ssh
  • tao_ssh
  • 2016年12月12日 11:05
  • 489

定义对象的索引器 以及 实现枚举接口IEnumerable

说明: 1、定义了对象索引器之后,就可以使用索引的方法得到对象中的某个属性 如 person[0] person并不是数组也不是集合,只是我们将他里面的属性封装成数组或集合,然后通过公开这个数组或集...
  • iloli
  • iloli
  • 2012年06月23日 11:39
  • 2251

Effective C# Item19:定义并实现接口优于继承类型

这个话题不仅仅是针对.NET的,在其他面向对象语言的环境中,例如Java,都会有接口和抽象类,对于究竟是选择接口还是抽象类,已经有了太多的讨论,包括设计模式中都有了一条设计原则:组合优于继承,虽然这条...

Hadoop自定义实现Writable/WritableComparable接口的类方法及应用

Hadoop自定义实现Writable/WritableComparable接口的类方法及应用 博主是刚刚踏入计算机领域的菜鸟,写博客更多的作用是备忘,如果有大牛们发现博客中有任何的错误缺漏,万望...

浅谈Java的Comparator接口实现自定义排序Arrays.sort()

使用Comparator接口:编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。 题目描述: 从A、B、C、D、E5个方面对每一家酒店进行评...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:定义和实现接口
举报原因:
原因补充:

(最多只允许输入30个字)