第四章 继承

BankAccounts

using System;
using Wrox.ProCSharp;
using Wrox.ProCSharp.VenusBank;
using Wrox.ProCSharp.JupiterBank;
namespace Wrox.ProCSharp
{
   class MainEntryPoint
   {
      static void Main()
      {
         IBankAccount venusAccount = new SaverAccount();
         IBankAccount jupiterAccount = new GoldAccount();
         venusAccount.PayIn(200);
         venusAccount.Withdraw(100);
         Console.WriteLine(venusAccount.ToString());
         jupiterAccount.PayIn(500);
         jupiterAccount.Withdraw(600);
         jupiterAccount.Withdraw(100);
         Console.WriteLine(jupiterAccount.ToString());
      }
   }
}

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

namespace Wrox.ProCSharp.VenusBank
{
   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);
      }
   }
}

namespace Wrox.ProCSharp.JupiterBank
{
   public class GoldAccount : 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("Jupiter Bank Saver: Balance = {0,6:C}", balance);
      }
        }

}

CurrentAccounts

using System;
using Wrox.ProCSharp;
using Wrox.ProCSharp.VenusBank;
using Wrox.ProCSharp.JupiterBank;

namespace Wrox.ProCSharp
{
   class MainEntryPoint
   {
      static void Main()
      {
        IBankAccount venusAccount = new SaverAccount();
                ITransferBankAccount jupiterAccount = new CurrentAccount();
                venusAccount.PayIn(200);
                jupiterAccount.PayIn(500);
                jupiterAccount.TransferTo(venusAccount, 100);
                Console.WriteLine(venusAccount.ToString());
                Console.WriteLine(jupiterAccount.ToString());
      }
   }
}

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

     public interface ITransferBankAccount : IBankAccount
   {
      bool TransferTo(IBankAccount destination, decimal amount);
   }
}

namespace Wrox.ProCSharp.VenusBank
{
   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);
      }
   }
}

namespace Wrox.ProCSharp.JupiterBank
{
   public class CurrentAccount : ITransferBankAccount
{
   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 bool TransferTo(IBankAccount destination, decimal amount)
   {
      bool result;
      if ((result = Withdraw(amount)) == true)
         destination.PayIn(amount);
      return result;
   }
   public override string ToString()
   {
      return String.Format("Jupiter Bank Current Account: Balance = {0,6:C}",
                                                                      balance);
   }   

}

}

MortimerPhones

namespace Wrox.ProCSharp.OOProg
{
   using System;

   public abstract class GenericCustomer
   {
      private string name;

      public GenericCustomer()
      {
         name = "<no name>";
      }

      public GenericCustomer(string name)
      {
          this.name = name;
      }

      public string Name
      {
         get {return name;}
         set {name = value;}
      }

   }

   public class Nevermore60Customer : GenericCustomer
   {
      private string referrerName;
      private uint highCostMinutesUsed;

      public Nevermore60Customer(string name) : this(name, "<None>")
      {
      }

      public Nevermore60Customer(string name, string referrerName) : base(name)
      {
         this.referrerName = referrerName;
      }

      public string ReferrerName
      {
         get {return referrerName;}
         set {referrerName = value;}
      }

   }

   public class MainEntryPoint
   {
      public static void Main()
      {
         GenericCustomer arabel = new Nevermore60Customer("Arabel Jones");
      }
   }
}

时间: 2024-08-30 05:28:59

第四章 继承的相关文章

【读书笔记】C#高级编程 第四章 继承

(一)继承的类型 1.实现继承和接口继承 在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承. 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数.在实现继承中,派生类型采用基类型的每个函数代码,除非在派生类型的定义中指定重写某个函数的实现代码.在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承非常有用. 接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码.在需要制定该类型具有某些可用的特性时,最好使用这种类型的

【object-c 学习笔记】第四章 继承

继承 inheritance1.概念: 2.声明新类的方法:@interface Circle:NSObjcet冒号后边的标识符是需要继承的类 3.有关术语超类(superclass):是继承的类:父类(parent class):是超类的另一种表达方式 :子类(subclass):是执行继承的类 :孩子类(child class):子类的另一种表达方式: 4.objcet-c 继承的实例 1 //程序中定义了两个类,分别是ClassA和ClassB:ClassA的父类是NSObject Cla

CSS3秘笈:第四章

第四章  继承 1.继承:应用在一个标签上的CSS样式被传到其内嵌标签上的过程. 2.继承的局限性: (1)有些属性不会被继承,如:CSS. (2)以下情况不会严格执行继承: ·影响网页元素位置的属性: ·Web浏览器使用它们自己固有的样式为各种标签设置样式: ·当有样式发生冲突时,更具体的样式会胜出.

“全栈2019”Java第四十四章:继承

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第四十四章:继承 下一章 "全栈2019"Java第四十五章:super关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

java-第四章-switch 判断分数奖励物品

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. java-第四章-switch 判断分数奖励物品,布布扣,bubuko.com

java-第四章-switch 淡旺季机票的售价问题

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. java-第四章-switch 淡旺季机票的售价问题,布布扣,bubuko.com

JavaScript高级程序设计:第十四章

第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继承了HTMLElement,因而与其他HTML元素具有相同的默认属性.不过,HTMLFormElement也有它自己下列独有的属性和方法. 取得<form>元素的引用方式有好几种.其中最常见的方式就是将它看成与其他元素一样,并为其添加id特性,然后再像下面这样使用getElementById()方

C++对象模型——Member的各种调用方式(第四章)

第四章 Function语意学 (The Semantics of Function) 如果有一个Point3d的指针和对象: Point3d obj; Point3d *ptr = &obj; 当这样做: obj.normalize(); ptr->normalize(); 时,会发生什么事情呢?其中的Point3d::normalize()定义如下: Point3d Point3d::normalize() const { register float mag = magnitude()