一、继承
*****语法
class Dog:Animal
{
.............
}
//私有的内容无法继承
***构造函数无法继承,但在子类中可以调用父类构造函数
例子:
public Dog() { }
public Dog(double height, double weight, string sex, int legs)
: base(height, weight, sex)//base就是指父类,这里调用父类的构造函数来完成一些初始化操作
{
this.legs = legs;
}
****虚方法
//virtual关键词可声明为虚方法,
//可以在子类中被重写(override//重写关键字)
class Animal
{
public virtual void Eat()
{
Console.WriteLine("动物吃饭");
}
}
class Dog
{
//重写override父类中的虚方法virtual
public override void Eat()
{
Console.WriteLine("狗爱啃骨头");
}
}
****在子类中使用new隐藏父类方法
//当子类和父类方法重名时使用new把父类方法名隐藏掉
class Animal
{
public virtual void Say()
{
Console.WriteLine("动物吃饭");
}
}
class Dog:Animal
{
public new void Say()
{
Console.WriteLine("狗爱啃骨头");
}
}
***在子类中调用父类方法
base.方法名
******重写微软定义的虚方法
例子:
//override从写微软定义的虚方法
public override string ToString()
{
return string.Format("{0}\t{1}\t{2}\t{3}", Height, Weight, Sex, Legs);
}
//c#中类不能多继承,但可以多层继承
class Animal
{}
class Human:Animal
{}
class Student:Animal
{}
--------------------------------------------------
二、抽象类
****定义语法
abstract class 类名
{
......
}
*****抽象类与普通类的比较
相同点:普通类能定义的内容在抽象类里面都可以定义
不同点:抽象类里面可以定义抽象方法,但普通类不能
****抽象方法的定义
例子:
//抽象类里面可以定义抽象方法
public abstract void Eat();
//抽象方法是没有方法体的(没有实现方法的功能)
public abstract void Say();
****抽象了的继承问题
抽象类是用来被继承的
抽象类的抽象方法在子类(不是抽象类)中必须全部被实现
//因为普通类里面不能有抽象方法
//实现抽象方法通过override,跟重写父类的虚方法关键词一样。
abstract class Animal
{
public abstract void Eat();
}
class Cat : Animal
{
public override void Eat()
{
Console.WriteLine("猫爱吃鱼");
}
}
abstract Fish:Animal
{
//抽象类可以继承抽象类
}
****抽象类的实例化问题
抽象类不能被直接实例化,他是用来被继承的
//抽象类的实例化是通过他的子类来实现的
例子:
Animal a;
a = new Cat();//实例化一个子类赋给抽象类的对象
-------------------------------------------------
三、接口
***定义语法
interfase 接口名//名称要有一个大写前缀I,如:IAnimal
{
...
}
/接口是对方法的约束,是一种规范
例子:
interface IAnimal
{
//报错public void Run() { }//接口中不能有方法的实现
//报错public IAnimal() { }//接口中没有构造函数
//报错public void Walk();//接口中不能写访问修饰符,
void Walk();//接口默认唯一的访问修饰符就是public 但是不能写出来
void Eat(DateTime time);
//报错string name;//接口不能包含字段
string Name//接口中可以定义属性
{
get;
set;
}
}
*****接口的继承问题
//用类来继承接口,接口也可以继承接口
//类继承接口,必须把接口的属性和方法全部实现
一个类可以同时继承多个接口
例子:
class Beep : IAnimal, IRobot
{
//要想IAnimal和IRobot接口的Walk方法实现不一样,那么必须显示的实现这两个方法
//要想和接口的Walk方法实现不一样,那么必须显示的实现这两个方法
//显示实现接口中的方法时不能加反问修饰符
void IAnimal.Walk()//接口名打点方法名
{
Console.WriteLine("动物走路");
}
void IRobot.Walk()
{
Console.WriteLine("机器人走路");
}
}
****接口的使用
例子:
//IAnimal ia;//声明一个接口对象
//ia = new Dog();
各个接口只能调用自己定义的方法和属性等内容
-------------------------------------------------------
四、静态
****定义语法
static class 类名
{
...
}
静态类中的字段、属性、方法必须全是静态的
普通类中也可以定义静态的字段,属性,方法
*******静态类的使用
//在静态方法里面如果要使用方法外面定义的变量,那个变量必须也是静态的
//静态的属性和方法可以直接类名打点属性或方法名字节使用
****注意问题
//静态类不用实例化 直接打点
类的对象不能使用静态的字段、属性、方法
静态的内容(字段、属性、方法)是属于类的 不属于类的对象//直接类名打点
|