一,Object Object 做为参数代表任意类型
如果类没有明确的继承关系 默认继承Object类
.object是所有类的基类
public class MyClass1 :Object{
public int _id;
}
Object ob =new Object();
ToString 是Object的方法 所有继承于此类的类的对象都能使用
ob.ToString();
二,覆盖
在子类中写一个和基类一样名字(参数名不同也算)的非虚函数,
会让基类中的函数被隐藏,编译后会提示要求使用New关键字 使用base 可以调用父类覆盖的方法
public class MyClass3
{
public void Test2()
{
Console.WriteLine("Test2");
}
}
public class MyClass4: MyClass3
{
public void Test2()
{
//base关键字 代表父类的对象
base.Test2();
//代表当前类的对象
// this.Test2();
Console.WriteLine("Test4");
}
}
调用 MyClass4 myClass4 = new MyClass4();
myClass4.Test2();
三,多态 即一个接口,多个功能,同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 ( 体现多态的功能有 :重写 重载 抽象类 接口 )
(1) 重写 必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
public class MyClass1 {
//父类允许子类覆盖叫重写 virtual允许子类覆盖 这种方法叫虚方法
public virtual void MyClass1Mothod1()
{
Console.WriteLine("MyClass1Mothod1");
}
}
public class MyClass2: MyClass1
{
//子类重写父类的方法 使用override
public override void MyClass1Mothod1()
{
base.MyClass1Mothod1 ();// MyClass1.MyClass1Mothod1();
Console.WriteLine("MyClass1Mothod1重写");
}
}
(2) 重载,函数名相同,参数类型或者顺序不同和个数有关,与返回类型无关
public void MyClass1Mothod() {
Console.WriteLine("MyClass1Mothod");
}
public void MyClass1Mothod(int a)
{
Console.WriteLine("MyClass1Mothod int a");
}
(相同
public static void MyClass1Mothod(string a)
{
}
)
(3)抽象类
抽象类
1.关键字 abstract
//抽象方法
public abstract void Drink();
//抽象属性
public abstract int Bge { get; set; }
2.不能被实例化 不能创建对象
3.抽象类可以包括抽象方法,或者普通方法
public abstract class MyClass {
//普通方法
public void Eat() {
Console.WriteLine("吃饱了");
}
//普通的属性
public int Age { get; set; }
//抽象方法
public abstract void Drink();
//抽象属性
public abstract int Bge { get; set; }
}
4.抽象方法和属性只能被定义 ,在子类中实现
public class MyClass1:MyClass{
//实现抽象类drink方法
public override void Drink() {
Console.WriteLine("实现抽象类 Drink方法");
}
private int _bge;
//实现抽象类Bge属性
public override int Bge { get { return _bge; } set { _bge = value; } }
}
5.继承抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实现
6.通过包含使用 override 修饰符的属性声明,可在派生类中重写抽象类 方法和属性
public abstract class People {
public abstract string Name { get; set; }
public abstract void Eat();
}
public abstract class Man : People
{
public abstract void Smoke();
}
public class Boy : Man{
public override string Name { get; set; }
public override void Eat() {
Console.WriteLine("123");
}
public override void Smoke() {
Console.WriteLine("456");
}
}
重载,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关
重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
覆盖,在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字