【黑马程序员】深入理解VS环境下的类继承和强制类型转换(自己的理解,如有偏差,请轻喷....)
来源:互联网 发布:windows 共享 无权限 编辑:程序博客网 时间:2024/05/16 00:24
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
a,类之间可以进行继承,Object类是所有类的父类(类都直接或间接继承之Object)
建立三个类,Animal,Dog和Human;父类是Animal,Dog和Human继承自Animal,而Animal显然继承于Object:
于是,在使用的时候:
我们可以看到,Animal类里定义的属性和方法都可以看到了。同样的,我们查看Dog和Human。
我们可以看到两者同有的属性和方法(蓝色边框),因为两者都继承自Animal,也能看到两者分别独有的属性和方法(红色边框),但红色边框里的内容不同,因为Dog类和Human类之间没继承关系,所以两者私有的属性和方法不会通用。
【Q:看到了一些没有写的方法(Equals方法,GetHashCode方法,GetType方法,ToString方法),这些方法哪里来的?A:很显然,继承自Object中,因此显然是Object里定义的。】
b,父类变量可以指向子类对象,子类变量不能指向父类对象
如图例子,我们声明一个Dog类型的变量dog,再new一个对象放入dog。再声明一个Animal类型的变量ani,将dog放进ani中。同理Human。但如果我们声明一个Animal类型的变量animal,再new一个对象放入animal,这时却无法声明一个Dog类型或Human类型的变量,将animal放进去。为何?
以Dog dog=newDog()为例,我们可以把计算机的内存当作一个大宾馆,宾馆可以满足不同来宾的入住要求。Dog dog就可以看成宾馆设立了一种适合Dog入住的房间,而dog=newDog()可以看成是真的来了一个Dog类型的来宾dog 。而dog属于一种Animal,因此,假设专门开设给Dog类型来宾的房间不够或无法提供的时候,Animal类型的房间也同样可以入住。
但相反。如果Animal animal=newAnimal()来了一个Animal类型的来宾animal,这时即便不能提供Animal类型的房间,也不能提供Dog类型或者Human类型的,因为你无法确定animal到底是什么类型。(是个人啊,还是条狗啊)
c,强制类型转换
我们可以看到第二行报错,我们试图理解一下:
我们有一个Animal类型的房间,这时来了一个Dog类型的来宾animal,由于某种原因,没有入住到Dog类型的房间,而是进入了Animal类型的房间。这时候进到下一行,我们又有了一个Dog类型的房间,还能让animal换进入么?答案是否定的,因为animal已经进入了Animal类型的房间,从外面看不到里面到底住的什么(也可能住着一个人啊,或者就是一个其它什么动物啊),因此不行。但第三行等同于告诉系统,房间里就是住的Dog类型的来宾,因为有了这条“确保”,因此可以让其进入到了Dog类型的房间。同理:
我们可以得到一个结论:VS在调用某个对象的属性或方法的时候,考虑到的不是该对象是什么,而是该对象住在哪里(存在于什么类型的内存中)。或者换句话说,一个对象的可用属性和方法,取决于其变量类型。(形象点说就是,当VS需要“狗”去缉毒的时候,它不是命令说“喂,狗,去缉毒!”,而是命令说“喂,住在狗那屋子里的,去缉毒!”)
- 【黑马程序员】深入理解VS环境下的类继承和强制类型转换(自己的理解,如有偏差,请轻喷....)
- 类型强制转换的理解
- 关于类型和强制类型转换的理解
- 对于引用类型和强制类型转换的理解
- FiveDay(关于继承强制转换的理解)---可能不正确
- JavaScript深入理解之强制类型转换
- 深入理解C++强制类型转换
- 黑马程序员_继承的理解
- 黑马程序员_继承的理解
- 深入理解指针类型间的转换
- 深入理解指针类型间的转换
- 深入理解指针类型间的转换
- 深入理解指针类型间的转换
- 黑马程序员--对面向对象的理解(二)--继承
- 黑马程序员——Java基础---深入理解面向对象(封装继承和多态)
- 黑马程序员 (高新技术)反射技术的深入理解
- 理解算法的偏差、方差和噪声
- 偏差和方差以及噪声的理解
- 做个ActionBar的标记,以后翻译这个文章用
- 使用文件进行优化
- 整个项目转换为UML 类图
- Deepin Linux Desktop, 截图工具剖析(三) python - namedtuple
- 写自己的代码之未解决
- 【黑马程序员】深入理解VS环境下的类继承和强制类型转换(自己的理解,如有偏差,请轻喷....)
- 创业者盯上语音IM新玩法
- [Jweb] JSP 编程 00 -Declaration- Scriptlet-表达式-Directive (推出原因 : Servlet写标签非常麻烦!)
- Drools规则引擎远程加载规则文件
- VC-摄像头控制SDK源码
- CoAP协议学习——CoAP基础
- hdu 1002 大整数加法模板
- JVM优化策略
- Emacs Tips