//虚拟方法:当父类的方法不能满足子类的需求时 我们需要重新修改从父类继承过来的方法
//修改的方法:父类中方法用关键字 virtual(虚拟的) 子类中用override(重写)

//字段不能是虚拟的,只有方法、属性才可以是虚拟的

//访问修饰符  virtual  返回值类型 方法名(参数){语句}

//访问修饰符  override  返回值类型 方法名(参数){修改后语句}
//具体用法如下

class Dog
{
public virtual void SayHello ()
{
Console.WriteLine ("wawa");
}
}

class Erha:Dog
{
public override void SayHello ()
{
Console.WriteLine ("aoao");
}
}

//这里遇到了密封关键字 sealed
//sealed修饰符,修饰类为不可被继承 修饰方法是不可被重写。
//用 sealed修饰的类不能被其他类继承!!!!用sealed 修饰的方法 不能重写!!!
// 方法可以继承不能修改 建立在虚方法前提下

class Person
{
public virtual void loving ()
{
Console.WriteLine ("asd");
}
}

sealed class Student1:Person
{
public sealed override void loving ()
{
Console.WriteLine ("cuole");
}
}

class Pupil //无法继承studengt类 
{
 //就算把修饰studenr的 sealed去掉,可以 继承了 也无法修改被sealed修饰的方法
}

 

//抽象方法是一种特殊的虚方法,它只起声明作用,所以只加一个“;”号,一定不能带实现部分。所以需要继承的时候修改 所以抽象方法的访问修饰符不能是private
// public abstract void Practice();     abstract class Animal       抽象类或者抽象方法用abstrac关键字
//抽象类可以没有抽象方法,抽象类不能被直接实例化,其他跟普通类没有区别。 abstract class Animal
//抽象类中如果有抽象方法,那么被继承的具体类一定要实现抽象类中得所有抽象方法。(把所有的抽象方法重写)
//如果累中有抽象方法 那么这个类也必须声明为抽象类
//如果抽象类的派生类不是抽象类 那么必须实现全部的抽象的方法

// abstract class Animal
// {
// public abstract void sayHello ();
//
// public abstract void run ();
//
// }
//
// class Lion:Animal
// {
// public override void sayHello ()
// {
// Console.WriteLine ("我是一头狮子");
// }
//
// public override void run ()
// {
// Console.WriteLine ("我用四条腿");
// }
// }
//
// class Snake:Animal
// {
// public override void sayHello ()
// {
// Console.WriteLine ("我是白蛇");
// }
//
// public override void run ()
// {
// Console.WriteLine ("我用身体蠕动");
// }
// }

在这里特别说明一点: 抽象是特殊的虚化方法   最重要的一点是!!抽象方法必须实现    虚拟的方法可以不实现

 

//静态用static 关键字修饰 修饰类叫静态类 修饰成员叫静态成员
//静态类不能实例化 仅包含有静态成员或者 const修饰的变量
//静态类不能被继承 默认为sealed 密封的
//因为不能实例化所以 不用构造函数

class Tool
{
public const int a = 10;

public static void intriduce ()
{
Console.WriteLine ("你好");
}
}

在main函数里可以直接类点方法名调用