c#中的里氏转换和Java中强制类型转换在多态中的应用
在c#中:
- 注意:
- 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数。
- 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员。但是父类永远都只能使用自己的成员,而不能使用子类的成员。
- 子类之间也不能互相使用对方的成员。
- 里氏转换的概念:
- )、子类可以赋值给父类
- )、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
- namespace 里氏转换_接口练习
- {
- class Program
- {
- static void Main(string[] args)
- {
- //测试1
- //IFavorateFood iff = new Cat();//子类可以赋值给父类
- //iff.Food();
- //IVoice iv = new Cat();
- //iv.Voice()
- //测试2
- //IVoice Pvoice = new Cat();
- //Pvoice.Voice();//只能调用IVoice中的方法
- //Cat cat = Pvoice as Cat;//如果父类装的子类对象,则可以将父类强转为子类对象
- //cat.Food();
- //测试3
- IVoice Pvoice = new Cat();
- IFavorateFood pFavorateFood = Pvoice as IFavorateFood;
- pFavorateFood.Food();
- Console.ReadLine();
- }
- }
- }
- public class Cat : IFavorateFood, IVoice
- {
- public void Food()
- {
- Console.WriteLine("我喜欢的事物是老鼠");
- }
- public void Voice()
- {
- Console.WriteLine("喵喵喵");
- }
- }
- interface IFavorateFood
- {
- void Food();
- }
- interface IVoice
- {
- void Voice();
- }
Java中强制类型转换在多态中的应用:
- //动物类
- abstract class Animal{
- String name;
- public Animal(String name){
- this.name = name;
- }
- public abstract void run();
- }
- //老鼠
- class Mouse extends Animal{
- public Mouse(String name){
- super(name);
- }
- public void run(){
- System.out.println(name+"四条腿慢慢的走!");
- }
- //老鼠特有方法---打洞
- public void dig(){
- System.out.println("老鼠在打洞..");
- }
- }
- //鱼
- class Fish extends Animal{
- public Fish(String name){
- super(name);
- }
- public void run(){
- System.out.println(name+"摇摇尾巴游啊游 !");
- }
- //吹泡泡
- public void bubble(){
- System.out.println(name+"吹泡泡...!");
- }
- }
- class Demo2
- {
- public static void main(String[] args)
- {
- /*
- Animal a = new Mouse("老鼠"); //多态
- //调用子类特有的方法
- Mouse m = (Mouse)a; //强制类型转换
- m.dig();
- */
- Mouse m = new Mouse("米老鼠");
- Fish f = new Fish("草鱼");
- print(f);
- }
- //需求: 定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。
- public static void print(Animal a){ // Animal a = new Mouse("米老鼠");
- if(a instanceof Fish){
- Fish f = (Fish)a;
- f.bubble();
- }else if(a instanceof Mouse){
- Mouse m = (Mouse)a;
- m.dig();
- }
- }
- }
c#中的里氏转换和Java中强制类型转换在多态中的应用的更多相关文章
- js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)
js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ...
- c#中convert.toInt32和int.parse()和强制类型转换的区别
string a="123"; int i=(int)a; 这是会出现错误因为:强制类型转换只能转换值类型不能转换引用类型 string属于引用类型 强制类型转换时如果值类型 ...
- java的强制类型转换
java强制类型转换 详细连接https://www.cnblogs.com/kuangwong/p/6198862.html 在Java项目的实际开发和应用中,常常需要用到将对象转为String这 ...
- Java学习笔记--继承和多态(中)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- Java基础12 类型转换与多态
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/01/2992662.html 作者:Vamei 出处:http://www.cnblogs.com ...
- Java基础12 类型转换与多态(转载)
类型检查 Java的任意变量和引用经过类型声明(type declaration),才能使用.我们之前见过对象数据.类数据.方法参数.方法返回值以及方法内部的自动变量,它们都需要声明其类型.Java是 ...
- java中的时区转换
目录 java中的时区转换 一.时区的说明 二.时间的表示 三.时间戳 四.Date类和时间戳 五.java中的时区转换 java中的时区转换 一.时区的说明 地球表面按经线从东到西,被划成一个个区域 ...
- C#中的强制类型转换与as转换的区别
C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA(); ClassB b = new ClassB(); 如果 ...
- Python中进制转换函数的使用
Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...
随机推荐
- Mac安装python细节
前言 之前在windows平台上安装python直接用Anaconda,优点是所有的科学计算的库都整合进去了,安装方便.在Mac系统下,当然也可以直接安装Anaconda,但是考虑到Mac会自带pyt ...
- spring boot 启动报:Composite-id class must implement Serializable: xxx错误
问题 在对spring boot项目进行修改后,重新启动时报如下错误: Composite-id class must implement Serializable: xxx xxx为具体的类 原因 ...
- FString转到char* TCHAR*
int ARPG_Database::BP_GetColumnIndex(int resultSet, FString columnName) { return GetColumnIndex(resu ...
- RabbiMQ原理与SpringBoot使用
RabbiMQ介绍 具体代码可参考我的github:https://github.com/UniqueDong/springboot-study 一.使用场景 RabbitMQ是一个消息中间件,所以最 ...
- CC05:基本字符串压缩
题目 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变成"a2b1c5a3".若压缩后的字符串没 ...
- MySQL索引原理与慢查询
=========索引原理与慢查询======= 阅读目录 - 一.介绍 - 二.索引的原理 - 三.索引的数据结构 - 四.聚集索引与辅助索引 - 五.MyS ...
- Python入门_汇总_未完待续
if/elseif/else for while break continue 多重循环 list [] duple() dict {} set {[]} 函数 help(abs) 查看abs函数的帮 ...
- .NET Core中Circuit Breaker
谈谈Circuit Breaker在.NET Core中的简单应用 前言 由于微服务的盛行,不少公司都将原来细粒度比较大的服务拆分成多个小的服务,让每个小服务做好自己的事即可. 经过拆分之后,就避免不 ...
- OpenCV ——IplImage应用解析
由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构.IplImage结构来源于Intel的另外一个函数库Intel Image Processing ...
- 不同ORM新的理解
对于ORM你怎么理解?你用过的ORM有什么区别?这是面试的时候基本上会问的问题. 问题很简单,本文不在阐述.本文主要讨论Dapper 和 EF Core First的区别. 从直观上来看两个都是ORM ...