C#之面向对象(二)封装、继承、多态

一、封装

概念:
隐藏对象的属性和实现细节,仅对外提供公共的访问方式。将数据和函数集合到一个个单元中。
作用:
(1)保护数据的安全性。
(2)隔离变化
(3)方便使用

二、继承

概念:
将一些类中共有的成员单独抽取出来形成一个父类,这些类可以通过继承来共享父类的资源。
作用:
共享父类资源
特性:
(1)继承的单根性:一个子类只能继承一个父类
(2)继承的传递性:子类能够继承父类的所有非私有成员
作用:
(1)节省开发时间,提高代码的重用性
(2)有利于扩展代码

可以通过继承来实现向上转型
向上转型:
将子类转型成父类,对象可以作为它本身的类型来使用

NameSpace _向上转型 {
    class China{
        Console.WriteLine("我是中国人");
    }
    class JiangXi : China{
        Console.WriteLine("我是江西人");
    }
    class GanZhou : JiangXi{
        Console.WriteLine("我是赣州人");
    }
}

GanZhou类继承了JiangXi类,因此赣州人可以称为江西人,而JiangXi类继承了China类,因此赣州人也可以称为中国人。

三、多态

概念:
不同类中的对象对于处理同一消息会有不同的表现
多态存在的三大条件:
1. 存在继承关系
2. 子类重写父类的方法
3. 父类引用指向子类对象

多态的具体体现:
一、抽象类
当父类中的方法不知道如何实现时,可以使用抽象类实现多态
特性:
抽象类不能实例化
抽象类中的抽象方法没有方法体
子类继承抽象类必须重写其中的抽象成员

二、接口
概念:
一种类型,一套语法规则,一个模板
特点:
(1)接口不能实例化
(2)不能包含具体的实现
(3)接口继承接口不需要实现其中的成员
(4)子类继承接口必须重写其中的成员

抽象类和接口的区别:
类是单继承,接口是多实现
抽象类是抽象类别,接口是抽象方法和功能
接口所有成员的方法隐含的都是抽象的,而抽象类还可以包含非抽象成员

三、虚方法
概念:
使用virtual关键字修饰的就是虚方法,虚方法可以被重写,重写时必须使用override关键字

public static virtual void Eat(){
    Console.WriteLine("吃西瓜");
}
public static override void Eat(){
    Console.WriteLine("吃葡萄");
}
public static new Eat(){
    Console.WriteLine("吃南瓜");
}
static void Main(){
    Eat();
}
//输出结果为:吃葡萄 吃南瓜
//虚方法是实现对原方法的覆盖
//使用new关键字时,只是对原方法的隐藏,并没有覆盖原方法,原方法也会执行

猜你喜欢

转载自blog.csdn.net/qq_29266497/article/details/81670944