抽象类和多态
抽象父类和具体子类规则
-
抽象类必须使用abstract关键字
-
抽象方法只能出现在抽象类中.抽象方法必须使用abstract关键字.
-
抽象类的抽象方法不能被实现
-
抽象类可以有非抽象普通方法
-
抽象类的对象不能new实例化(即只有具体类的对象才能实例化)
-
具体子类实现父类的抽象方法时需要使用override关键字
-
多态:可以使用抽象父类的对象(抽象类不能new)引用它的具体子类对象
abstract class Food {//抽象类必须使用abstract关键字
//抽象方法必须使用abstract关键字
public abstract void Eaten();//抽象类的抽象方法不能实现
public void Test() {//抽象类可以有具体方法实现
Console.WriteLine("Food.test()非抽象的普通方法实现");
}
}
class Apple : Food {
public override void Eaten() {//子类实现抽象父类的抽象方法
Console.WriteLine("苹果真好吃");
}
}
class Drink : Food {
public override void Eaten() {//子类实现抽象父类的抽象方法
Console.WriteLine("饮料真好喝");
}
}
class Program {
static void Main(string[] args) {
//Food x = new Food();//错误!抽象类不能new
//多态:抽象父类对象引用它的具体子类对象
Food a = new Apple();
Food d = new Drink();
a.Eaten();//抽象父类对象(引用子类Apple对象)调用子类Apple.Eaten()方法
d.Eaten();//抽象父类对象(引用子类Drink对象)调用子类Drink.Eaten()方法
a.Test(); //抽象父类对象调用自身普通方法
Console.ReadKey();
}
}
静态类
堆区:存放数组,对象,字符串变量等;
栈区:自动变量,比如 int i之类;
静态区:存放静态类(的成员),全局一直存在.
常量区:存放const常量,字面值常量例如"hello"(注意不是