抽象类和抽象方法
2014-12-26 20:28
197 查看
抽象类不能是密封的或静态的。抽象类的成员只能被子类的对象来调用。注:抽象成员需要子类override重写后使用。非抽象成员由子类直接调用
不能初始化的类被叫做抽象类。抽象类只能被继承。不能被实例化。抽象类中可以包含非抽象方法,属性,字段等成员。
例如:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication34
{
abstract class People
{
public abstract string Name { get; set; }//抽象类可以包含抽象属性
public int Age { get; set; }//抽象类可以包含非抽象的属性
public abstract void Method();//抽象类可以包含抽象方法
public void Sum(int a, int b)//抽象类可以包含非抽象方法
{
Console.WriteLine ("我的学号是:{0}",a+b );
Console.WriteLine("我的名字叫{0},今年{1}岁了", Name, Age);
}
public People()//抽象类还可以有构造函数。因为抽象类不能实例化,所以它就无法调用这个构造函数。这个构造函数只有在它所在的类的“派生类初始化”的时候才能够被执行到。
{
this.Age =5;
this.Name ="武大郎" ;
}
}
class B:People
{
public override void Method()//重写“抽象父类”的抽象方法,需要加上override关键字
{
Console.WriteLine("实现父类的抽象方法");
}
public override string Name
{
get;
set;
}
public B
{
}
}
class C:B
{
}
//class C //含有抽象方法的类一定是抽象类,这里的c 类不是抽象类。所以定义抽象方法会报错。
//{
// public abstract void mmabstract();
//}
class Program
{
static void Main(string[] args)
{
//People a=new A();//错误,抽象类不能实力化。
People a=new B();//正确,实例化一个B类型的对象赋值给父类A的一个变量。
a.Method();//输出实现父类的抽象方法,即:这里调用是子类的Method方法。
B b=new B ();
b.name="西门庆";
b.sum(8,9);//抽象类的非抽象方法只能被子类的对象来调用。因为B类重写了A类的抽象Name属性,这里输出“我的学号是17,我的名字叫西门庆,今年5岁”
C c=new C ();//因为c类继承B类,B类又继承A类,所以c类对象可调用A类公有成员
c .sum(10,6);//调用父类的父类的Sum方法,这里输出“我的学号是16,我的名字叫武大郎,今年5岁”
Console .ReadKey ();
}
}
}
不能初始化的类被叫做抽象类。抽象类只能被继承。不能被实例化。抽象类中可以包含非抽象方法,属性,字段等成员。
例如:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication34
{
abstract class People
{
public abstract string Name { get; set; }//抽象类可以包含抽象属性
public int Age { get; set; }//抽象类可以包含非抽象的属性
public abstract void Method();//抽象类可以包含抽象方法
public void Sum(int a, int b)//抽象类可以包含非抽象方法
{
Console.WriteLine ("我的学号是:{0}",a+b );
Console.WriteLine("我的名字叫{0},今年{1}岁了", Name, Age);
}
public People()//抽象类还可以有构造函数。因为抽象类不能实例化,所以它就无法调用这个构造函数。这个构造函数只有在它所在的类的“派生类初始化”的时候才能够被执行到。
{
this.Age =5;
this.Name ="武大郎" ;
}
}
class B:People
{
public override void Method()//重写“抽象父类”的抽象方法,需要加上override关键字
{
Console.WriteLine("实现父类的抽象方法");
}
public override string Name
{
get;
set;
}
public B
{
}
}
class C:B
{
}
//class C //含有抽象方法的类一定是抽象类,这里的c 类不是抽象类。所以定义抽象方法会报错。
//{
// public abstract void mmabstract();
//}
class Program
{
static void Main(string[] args)
{
//People a=new A();//错误,抽象类不能实力化。
People a=new B();//正确,实例化一个B类型的对象赋值给父类A的一个变量。
a.Method();//输出实现父类的抽象方法,即:这里调用是子类的Method方法。
B b=new B ();
b.name="西门庆";
b.sum(8,9);//抽象类的非抽象方法只能被子类的对象来调用。因为B类重写了A类的抽象Name属性,这里输出“我的学号是17,我的名字叫西门庆,今年5岁”
C c=new C ();//因为c类继承B类,B类又继承A类,所以c类对象可调用A类公有成员
c .sum(10,6);//调用父类的父类的Sum方法,这里输出“我的学号是16,我的名字叫武大郎,今年5岁”
Console .ReadKey ();
}
}
}
相关文章推荐
- Java中的抽象类与抽象方法
- 抽象类、抽象方法和内部类
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- PHP5.0对象模型探索之抽象方法和抽象类
- 简谈 java 抽象类 抽象方法(基础)
- C#——面向对象——继承——抽象类和抽象方法
- Java-抽象方法和抽象类
- C# 抽象类,抽象属性,抽象方法(实例讲解)
- 抽象方法与抽象类
- PHP中抽象类和抽象方法概念与用法分析
- Java中关于抽象类抽象方法以及接口的总结
- 抽象类 抽象方法详解
- 抽象类与抽象方法
- C#中的抽象类和抽象方法
- 接口、抽象类、抽象方法和虚方法的区别
- 第十节 抽象方法和抽象类 [10]
- java学习笔记7--抽象类与抽象方法
- Java基础之抽象类与抽象方法
- PHP面向对象基础概念(抽象方法和抽象类)
- 抽象类和抽象方法