抽象类
c#允许把类和方法声明为abstract,即抽象类和抽象方法。你会发现Animal类其实根本就不能被实例化,一只猫张什么样,你可以想象,一只动物张什么样,你能想象吗?
抽象类需要注意的几点:一,抽象类不能实例化;抽象方法是必须被子类重写的方法;如果类中包含有抽象方法,那么类必须定义为抽象类,不论其是否包含有其他方法。
我们应该考虑让抽象类拥有尽可能多的代码,尽可能少的数据。
抽象类通常代表一个抽象概念,他提供一个继承的出发点当设计一个抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点应当均是抽象类。
抽象类:
/// <summary>
///父类
/// </summary>
public abstract class Animal
{
protected string name = "";
protected int shoutNum = 3;
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "无名";
}
/// <summary>
/// 抽象方法
/// </summary>
/// <returns></returns>
public abstract string Shout();
}
子类:
/// <summary>
/// Cat子类
/// </summary>
public class Cat:Animal
{
public Cat()
: base()
{ }
public Cat(string name)
: base(name)
{ }
/// <summary>
/// 重写父类的抽象方法
/// </summary>
/// <returns></returns>
public override string Shout()
{
string result = "";
for (int i = 0; i < shoutNum; i++)
{
result = result + "嘧,";
}
return "我的名字叫" + name + " " + result;
}
}
接口(interface):
接口是把隐式公共方法和属性组合起来,来分装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上和声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。接口不能被实例化,不能有构造方法和字段,不能有修饰符。不能声明虚拟的或静态的。实现接口中的类必须要实现接口中的所有方法和属性。
一个类可以支持多个接口,多个类可以支持相同的接口。接口的命名前面要加‘I’,这是规范。接口用interface声明,而不是class,接口中的方法和属性前面不能有修饰符、方法没有方法体。
看下面机器猫变东西的例子:
变东西接口:
/// <summary>
/// 变东西接口
/// </summary>
public interface IChange
{
string ChangeThing(string thing);
}
机器猫类:
/// <summary>
/// 机器猫继承于猫,并实现了IChange接口,注意Cat和IChange是用‘,’隔开的
/// </summary>
public class MachineCat : Cat, IChange
{
public MachineCat()
: base()
{ }
public MachineCat(string name)
: base(name)
{ }
/// <summary>
/// 实现接口
/// </summary>
/// <param name="thing"></param>
/// <returns></returns>
public string ChangeThing(string thing)
{
return base.Shout() + "我有万能的口袋,我能变出"+thing;
}
}
哈哈,机器猫要变东西啦:
public class AnimalChange
{
private string changeMatch()
{
MachineCat mcat = new MachineCat("叮当");
return mcat.ChangeThing("各式各样的东西!");
}
}
抽象类与接口区别:
从表象上看抽象类可以给出一些成员的实现,接口却不包含成员的实现;抽象类的抽象成员可以被子类部分实现,接口的成员需要实现类完全实现;一个类只能继承一个抽象类,但可以实现多个接口。
也可以从以下几个方面来区别抽象类与接口:第一,类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。第二,如果行为跨越不同类的对象,可使用接口,对于一些相似的类对象,用继承抽象类。第三,从设计角度看,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的从在,方法如何实现还不确认,预先定义。
分享到:
相关推荐
《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为三大类: 1. **创建型模式**:专注于对象的创建机制,确保系统在合适的时机创建正确的对象。 - **单例模式**...
《设计模式学习笔记》主要探讨了GOF的23种设计模式以及类设计的基本原则,旨在帮助开发者理解和应用这些经过时间验证的成熟解决方案。设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准...
以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...
文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...
以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...
设计模式是软件工程中的一种通用解决方案,它是在特定上下文中解决常见问题的经验总结。这个“23种设计模式学习笔记”文档将引导...通过阅读“设计模式学习笔记.doc”,你可以逐一了解并掌握这些模式的原理和使用场景。
面向对象编程是Java的核心特性,本学习笔记涵盖了这一主题的深度探索,旨在帮助开发者深入理解并熟练运用面向对象的思想。2023年的版本更新可能包含最新的面试趋势和技术发展。以下将详细介绍Java面向对象编程的一些...
1. UML类图:这是设计模式学习的基础,它用图形方式描绘类与类之间的关系,如继承、关联、聚合等,帮助我们更好地理解和设计系统架构。 2. 反射:.NET反射工厂模式利用反射机制动态创建对象,提供了在运行时获取...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
在Java等面向对象编程语言中,设计模式的应用能够提高代码的可读性、可维护性和复用性。以下是对标题和描述中提到的设计模式的详细解释: 1. **代理模式**: 代理模式提供一个代理对象来控制对原对象的访问。代理...
在编程世界中,Java、C#等面向对象的语言中,抽象类和接口是两种重要的设计模式,它们都用于实现多态性,但各有其特点和使用场景。本练习旨在帮助开发者深入理解这两种概念,通过实践巩固理论知识。 首先,我们来...
设计模式分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)。 二、创建型模式 1. 单例模式:保证一个类只有一个实例,并提供全局访问点。 2....
《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...
这些模式是面向对象编程中的一种最佳实践,通过标准化的方式处理常见的设计问题。下面我们将深入探讨一些Java设计模式及其应用。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,我们可以...
根据给定的信息“图解设计模式,结城浩著学习笔记”,我们可以推断出这份文档主要涉及了设计模式的学习和理解。《图解设计模式》是一本由日本著名程序员结城浩撰写的书籍,该书以图形化的方式深入浅出地讲解了软件...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
在本文中,我们将探讨三个主要的设计模式:简单工厂模式、策略模式以及两个重要的设计原则:单一职责原则和开放-封闭原则。 1. **简单工厂模式**: 简单工厂模式是一种创建型设计模式,它将对象实例化的责任集中在...
Java学习笔记及设计模式是程序员进阶过程中必不可少的资源,涵盖了广泛的Java基础知识和高级概念,同时结合了设计模式这一软件工程的重要组成部分。本资源集合旨在帮助开发者深化对Java语言的理解,提升编程技能,并...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
本学习笔记将深入探讨面向对象的基本概念、原则以及常见设计模式。 1. **基本概念** - **对象**:对象是类的实例,具有属性(数据成员)和方法(函数成员)。对象是现实世界中的实体在程序中的抽象。 - **类**:...