c#学习笔记——抽象类、抽象方法、抽象属性
2014-08-04 09:52
405 查看
抽象类与抽象方法:
先说些概念的东西:
在一个类前面加上“abstract”关键字,此类就成为了抽象类。 对应的,一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法。
abstract class Fruit //抽象类
{
public abstract void GrowWhere(); //抽象方法
}
注意抽象方法不能有实现代码,在函数名后直接跟一个分号。
抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽
象类。
好了,说一下我个人的理解吧:抽象类就是定义一个类(里面不止是有方法还有属性,属性等等讲),里面都是些想要被重写的方法(属性),然后方便子类重写,抽象类的抽象方法就不能写实行代码,子类去写。也可以理解,抽象类里的抽象方法(属性)都很抽象,每个子类的实现代码都不一样,这样就方便子类去写,也就不必虚拟和重写了。
还有就是抽象类里的所有抽象方法,子类都要用到。
看个列子吧:
namespace StudyTemp
{
abstract class Fruit
{
public void SayHello()
{
Console.WriteLine("大家好,我是水果!");
}
public abstract void GrowWhere();
}
class Apple : Fruit
{
public override void GrowWhere()
{
Console.WriteLine("南方北方都有我");
}
}
class Banana :
fruit
{
public override void GrowWhere()
{
Console.WriteLine("南方才有我");
}
}
class Program
{
static void Main(string[] args)
{
Fruit f;
f = new Apple();
f.SayHello();
f.GrowWhere();
f = new Banana();
f.SayHello();
f.GrowWhere();
Console.ReadKey();
}
}
}
截图:
这个列子还想说一些细节方面的:
包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法。也就是当一个类里有一个方法是抽象方法,那么这个类就是抽象类,但是抽象类里可以有不抽象的方法和属性。就不如上面的SayHello方法。
在调用的时候就应该这样:抽象类 抽象类变量名 = new 继承自此抽象类的具体子类名( );
抽象属性
刚才说了,除了方法可以是抽象的之外,属性也可以是抽象的。
先给个例子吧,也是水果的:
namespace StudyTemp
{
abstract class Fruit
{
public abstract string Name
{
get;
set;
}
public abstract void SayHello();
}
class Apple : Fruit
{
private string name;
public override string Name
{
get
{
return name;
}
set
{
if (value != "小红")
{
this.name = value;
}
else
{
Console.WriteLine("不能用这个名字!");
return;
}
}
}
public override void SayHello()
{
Console.WriteLine("我是苹果{0}",name);
}
}
class Program
{
static void Main(string[] args)
{
Fruit f;
f = new Apple();
f.Name = "小白";
f.SayHello();
Fruit a;
a = new Apple();
a.Name = "小红";
Console.ReadKey();
}
}
}
看到了,我们对属性也进行了重写。
先说些概念的东西:
在一个类前面加上“abstract”关键字,此类就成为了抽象类。 对应的,一个方法类前面加上“abstract”关键字,此方法就成为了抽象方法。
abstract class Fruit //抽象类
{
public abstract void GrowWhere(); //抽象方法
}
注意抽象方法不能有实现代码,在函数名后直接跟一个分号。
抽象类专用于派生出子类,子类必须实现抽象类所声明的抽象方法,否则,子类仍是抽
象类。
好了,说一下我个人的理解吧:抽象类就是定义一个类(里面不止是有方法还有属性,属性等等讲),里面都是些想要被重写的方法(属性),然后方便子类重写,抽象类的抽象方法就不能写实行代码,子类去写。也可以理解,抽象类里的抽象方法(属性)都很抽象,每个子类的实现代码都不一样,这样就方便子类去写,也就不必虚拟和重写了。
还有就是抽象类里的所有抽象方法,子类都要用到。
看个列子吧:
namespace StudyTemp
{
abstract class Fruit
{
public void SayHello()
{
Console.WriteLine("大家好,我是水果!");
}
public abstract void GrowWhere();
}
class Apple : Fruit
{
public override void GrowWhere()
{
Console.WriteLine("南方北方都有我");
}
}
class Banana :
fruit
{
public override void GrowWhere()
{
Console.WriteLine("南方才有我");
}
}
class Program
{
static void Main(string[] args)
{
Fruit f;
f = new Apple();
f.SayHello();
f.GrowWhere();
f = new Banana();
f.SayHello();
f.GrowWhere();
Console.ReadKey();
}
}
}
截图:
这个列子还想说一些细节方面的:
包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法。也就是当一个类里有一个方法是抽象方法,那么这个类就是抽象类,但是抽象类里可以有不抽象的方法和属性。就不如上面的SayHello方法。
在调用的时候就应该这样:抽象类 抽象类变量名 = new 继承自此抽象类的具体子类名( );
抽象属性
刚才说了,除了方法可以是抽象的之外,属性也可以是抽象的。
先给个例子吧,也是水果的:
namespace StudyTemp
{
abstract class Fruit
{
public abstract string Name
{
get;
set;
}
public abstract void SayHello();
}
class Apple : Fruit
{
private string name;
public override string Name
{
get
{
return name;
}
set
{
if (value != "小红")
{
this.name = value;
}
else
{
Console.WriteLine("不能用这个名字!");
return;
}
}
}
public override void SayHello()
{
Console.WriteLine("我是苹果{0}",name);
}
}
class Program
{
static void Main(string[] args)
{
Fruit f;
f = new Apple();
f.Name = "小白";
f.SayHello();
Fruit a;
a = new Apple();
a.Name = "小红";
Console.ReadKey();
}
}
}
看到了,我们对属性也进行了重写。
相关文章推荐
- java学习笔记7--抽象类与抽象方法
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- C#学习笔记:控件BackColor属性与ForeColor的使用方法
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- .Net学习笔记----2015-07-22(C#基础复习09,虚方法、抽象方法、接口复习)
- 巴巴运动网学习笔记三之产品分类实体对象基本属性的JPA映射,用泛型技术对产品分类的业务管理Bean抽象,单元测试产品分类的业务管理Bean.,重载业务管理Bean的删除方法,
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- php学习笔记------[抽象类与抽象方法]
- C#学习笔记四: C#3.0自动属性&匿名属性及扩展方法
- Java关键字static,abstract,instanceof使用(静态属性,静态方法,抽象类抽象方法的学习)
- C#2005 .NET3.0高级编程学习笔记————类和结构,类的数据成员,类的函数成员(方法、属性)
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
- 【Java学习笔记】接口 抽象类 抽象方法
- 大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
- C#抽象类、抽象方法、抽象属性
- C++学习笔记4--静态属性 静态方法 虚方法 抽象方法 多态性 析构函数 运算符重载 多继承 虚继承
- php学习笔记------[抽象类与抽象方法]
- CLR Via C# 学习笔记(6) 方法参数相关(out ref params)
- .NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析