继承 多态

abstract
  抽象函数是隐式的虚函数,可以理解为没有方法体的虚函数,而且继承他的类必须实现它。
  若一个类中的全部成员都是抽象的,类也必须声明为abstract

密封类:不能被继承的类,修饰词为 sealed


方法覆盖:继承中的方法覆盖,必须在基类中使用关键字virtal ,在子类中使用关键字 override ,以区分新建一个行为的同名函数。虚方法不能为private,override方法必须与虚方法的名字、参数列表、返回类型完全一致。可以使用virtual修饰的包括非静态方法、非静态属性、非静态索引器。

访问修饰符:internal protected 提供了内部(同一集合)或者受保护两种访问方式,也就是internal或者protected,而不是internal且protected

派生类的构造函数:在子类的构造函数中添加父类构造函数的初始化器,
        形式为Constructor(param1,param2,param3..):base(param1,param2...)


Base关键字:
通过使用此关键字子类可以调用基类的成员,包括函数变量,还有索引器。索引器也是可以继承的,可以使用base[index]来调用基类的索引器访问索引器的数据集合。


多级继承:可以使用后代类型对象给一个祖先类型变量赋值,但是祖先类型变量还是祖先类型,只能访问祖先类型的成员。所以要实现动态绑定需要在父类中定义抽象方法,并通过动态绑定自动调用引用对象的具体方法。这也就是多态。

多态:通过动态绑定原理,使用单个变量来引用不同的对象,自动调用引用对象类的对应方法。动态绑定石指计算机发生的过程,而多态是用于对象和类的抽象讨论。可以用子类对象初始化父类对象,但是此对象仍然是父类类型对象,所以只能调用父类中有定义的成员。

  is 操作符:可以判断当前对象的类型,在下降类型转换中使用,返回值为true false
  as 操作符:也可以判断当前对象类型,并且如果符合子类型就可以自动转化,不符合的话返回null
    ps:以上两操作符对于接口转换同样适用。

虚函数和非虚函数:
   默认为非虚函数,在子类中如果出现和父类中相同参数以及返回类型的函数,必须使用关键字new进行隐藏,而不会执行动态绑定。如果是虚函数使用override进行覆盖,将执行动态绑定。
   之所以默认为非虚函数,是为了在版本控制中不要如果出现基类升级,在编译时会提醒程序开发人员进行升级,若为虚函数的话讲默认为子类将其覆盖;而且虚函数执行速度也慢。

 关于多重继承:和java一样c# 不支持多重继承,而是使用接口。


接口的定义:接口的访问修饰符默认为public,且只能添加public
            接口中的 函数 方法 存取器等等都不能添加访问修饰符,默认为public abstract

接口的显式调用:
   接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。 【接口名.成员名】
   显式实现方式不能用public、abstract、virtual、new来修饰;而且调用的时候不能直接用实现接口的对象直接调用,而是必须提升为接口类型后进行调用。

 

转载于:https://www.cnblogs.com/wanghuijunshiwo/archive/2010/01/22/1654210.html

### 面向对象编程中的继承 继承是面向对象编程的重要机制,允许新类从现有类派生属性和行为。这不仅提升了代码的可重用性,还帮助构建清晰的层次结构[^4]。 #### Python 中的继承示例 ```python class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclasses must implement this method") class Dog(Animal): # 继承自 Animal 类 def speak(self): return f"{self.name} says Woof!" class Cat(Animal): # 同样继承自 Animal 类 def speak(self): return f"{self.name} says Meow!" ``` ### 多态的概念及其重要性 多态意味着同一操作作用于不同类型的对象上会呈现出不同的行为形式。这种灵活性使得程序更加通用且易于扩展[^1]。 在上述例子中,尽管 `Dog` 和 `Cat` 是两个完全不同的动物种类,但它们都实现了来自基类 `Animal` 的 `speak()` 方法。这意味着我们可以编写如下代码: ```python def animal_sound(animal): print(animal.speak()) dog = Dog('Buddy') cat = Cat('Whiskers') animal_sound(dog) # 输出: Buddy says Woof! animal_sound(cat) # 输出: Whiskers says Meow! ``` 这里的关键在于即使不知道传入的是哪种具体的动物实例,只要该实例属于 `Animal` 或其任何子类,就能调用 `.speak()` 并获得适当的结果。这就是多态性的强大之处所在[^3]。 ### 实现多态的方式 - **方法重写**:当子类提供了一个与其父类同名的方法时,则认为是在对该方法进行重写。这种方式让子类能够改变或增强父类的行为。 - **方法重载**:虽然严格意义上讲 Python 不支持传统意义上的方法重载(即同一个类中有多个相同名称但参数列表不同的方法),但是可以通过默认参数值来模拟这一功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值