C#基础与技巧——类与里氏替换 -有向边的UML应用——泛化、实现和关联的依赖思想

继承
public class Person{};
Public class student:Person{};

person这个类叫父类(基类),student这个类叫子类(派生类)
student继承了person类
person类派生了student类

1
2
3
4
5
6

类中的构造函数问题

子类中的构造函数会自动的调用父类中无参的构造函数,所以如果父类中写了有参的构造函数,必须再单独写无参的构造函数。
  (隐式调用)子类的构造函数会默认调用父类的无参构造函数
  (显示调用)在子类的构造函数后加”:base(参数,参数,…)

里氏替换
①父类空间,不能转成子类
在这里插入图片描述

②父类对象子类空间,可显示转子类

在这里插入图片描述

③父类对象子类空间,不能转其它子类

在这里插入图片描述

④子类对象子类空间,可隐式转父类
在这里插入图片描述

ps:
  我的理解可以这么表达:父类new父类的空间,父类要转换成子类,父类没有子类的内容,而子类继承了父类的一切内容,子类所需的空间要比父类多,所以父类转换不了子类,而子类的空间大,子类空间里包含了父类所需的内容,所以子类可以转父类,有一些空间是没有用到。

举个例子来说:
  父类有一个属性和一个方法,假如占两个空间,子类自己也有一个属性和一个方法,但是子类由于继承了父类,子类相当于拥有2个属性和2个方法,所以子类的空间会有4个,父类类型的2个加上自己的2个,所以子类可以转换成父类,而父类不能转换成子类。

is 和 as

is 返回布尔类型,true可以转换,false不能转换
  as 直接返回相应类型,如果转换不了,不报异常,返回的是null

————————————————

 有向边的UML应用——泛化、实现和关联的依赖思想 

根据依赖关系的定义——依赖表示两个或多个模型元素之间语义上的关系 ,即提供者的某些 变化会要求或指示依赖关系中客户的变化——泛化 、实现和关联也是依赖关系 ,它们都包含 了依赖的思想。

举个例子。下面是一道极为常见的笔试题
(以Java语言为例 ) :

写出下列程序的运行结果 :
public class Test {
public static void main(String[] args) {
Child child = new Child();
}
}
class Parent {
Parent() {
System . out . println("to construct Parent . ");
}
}
class Child extends Parent {
Child() {
System . out . println("to construct Child . ");
}
Delegatee delegatee = new Delegatee();
}
class Delegatee {
Delegatee() {
System . out . println("to construct Delegatee . ");
}
}

这道题考的是构造函数的执行顺序 ,输出结果如下 (以Java语言为例 ) :

to construct Parent .
to construct Delegatee .
to construct Child .
其实 ,构造函数的执行顺序 ,何尝不是“依赖思想”决定的呢?具体而言 
就是“被依赖的先构  ,依赖于人的后构造”。
继承关系包含了依赖思想 ,子类Child依赖父类Parent,所以Parent先于Child构造。
关联关系包含了依赖思想 ,聚集是关联关系的一种 ,所以被聚集的 类Delegatee先于Child构造。

在这里插入图片描述
相信至今还有人会画出类似下面的类图 ,它错在继承的箭头方向画反了 !经过以上的讨论 ,
在这里插入图片描述

我们知道了大师们把继承的箭头方向规定为指向父类有其深刻含义——它代表了依赖的方向 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是刘彦宏吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值