抽象类,摘要方法
<1>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
//抽象类不能是密封的或静态的。 抽象类的成员仅仅能被子类的对象来调用。注:抽象成员须要子类override重写后使用。非抽象成员由子类直接调用
//不能初始化的类被叫做抽象类。抽象类仅仅能被继承。不能被实例化。抽象类中能够包括非抽象方法,属性。字段等成员。
abstract class A //A是一个抽象类
{
public abstract string Name { get; set; } //抽象类能够包括抽象属性
public int Age { get; set; } //抽象类能够包括非抽象的属性
public abstract void Method(); //抽象类能够包括抽象方法。抽象方法仅仅需声明。无需实现。
public void Sum(int a, int b) //抽象类能够包括非抽象的方法。
{
Console.WriteLine(a + b);
Console.WriteLine("我的名字叫{0},今年{1}岁", Name, Age);
}
public A() //抽象类还能够有构造函数。
由于抽象类不能实例化,所以它就无法调用这个构造函数。这个构造函数仅仅有在它所在的类的“派生类初始化”的时候才干够被运行到。
{
this.Age = 5;
this.Name = "张三";
}
}
class B : A
{
public override void Method() //重写“抽象父类”的抽象方法。注意:实现的时候须要加overridekeyword
{
Console.WriteLine("实现父类的抽象方法");
}
public override string Name //重写“抽象父类”的抽象属性
{
get;
set;
}
public B()
{
}
}
class C : B
{
}
/*
class C
{
//含有抽象方法的类一定是抽象类,而这里的C类并非抽象类。
所以以下定义的抽象方法报错
public abstract string Myabstarct(); //错误 “Test.C.Myabstarct()”是抽象的,但它包括在非抽象类“Test.C”中
}
*/
class InheritanceTest1
{
static void Main(string[] args)
{
//A a = new A(); //错误 ,抽象类不能被实例化。
A a = new B(); //正确,实例化一个B类型的对象赋值给父类A的一个变量a
a.Method(); //输出“实现父类的抽象方法”即:这里调用是子类的Method方法。
B b = new B();
b.Name = "燕子李三";
b.Sum(5, 6); //抽象类的非抽象方法仅仅能被子类的对象来调用。
由于B类重写了A类的抽象Name属性。所以这里输出 “11 我的名字燕子李三。今年5岁”
C c = new C(); //由于C类继承B类。而B类又继承A类,所以C类的对象能够调用A类的公有成员
c.Sum(10, 6); // 调用父类的父类的Sum方法。所以这里输出“16 我的名字张三,今年5岁,”
Console.ReadKey();
}
}
}
狮子、猴子和鸽子都是一种动物。因此,能够建立一个Animal 抽象基类,让狮子、猴子和鸽子从其派生出来
abstract class Animal //抽象的动物类
{
public abstract void eat();
}
class Lion : Animal //狮子
{
public override void eat()
{
Console.WriteLine("我吃肉");
}
}
class Monkey : Animal //猴子
{
public override void eat()
{
Console.WriteLine("我吃香蕉");
}
}
class Pigeon : Animal //鸽子
{
public override void eat()
{
Console.WriteLine("我吃大米");
}
}版权声明:本文博主原创文章。博客,未经同意不得转载。
浙公网安备 33010602011771号