父类与子类的转换as,is

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 子类与父类的相互转换
{
    class Program
    {
        static void Main(string[] args)
        {
            //try catch finally 与 continue
            //如果在try中遇到continue,则忽略try中continue之后的语句
            //但是依然执行finally中语句
            //finally之外的语句也不执行
            bool _flag = true;
            while(true)
            {
                try
                {
                    //if(_flag)
                    //    continue;

                    //如果_falg为true,这下面的两句不执行
                    //Person per = new Student();
                    //per.Say();//此时输出father 

                    //类的转换:as is
                    //1. is:返回bool类型,指示是否可以做这个转换
                    //2. as:如果转换成功,则返回对象,否则返回null
                    //作用:我们可以将所有的子类当做是父类来看,针对父类进行编程
                    //      可以写出通用代码,从而适应需求的不断改变
                    Person per = new Student();

                    Student stu1 = per as Student;
                    if(stu1 != null)
                    {
                        stu1.Say();
                    }

                    Teacher tea1 = per as Teacher;
                    if(tea1 == null)
                    {
                        Console.WriteLine("转换失败");
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    //如果try中执行了continue,则这两句依然要执行
                    Console.WriteLine("finally");
                    Console.ReadKey();
                }

                //如果在try中执行continue,则下面的两条语句并不执行
                Console.WriteLine();
                Console.ReadKey();
            }

        }
    }

    class Person
    {
        public void Say()
        {
            Console.WriteLine("father");
        }

    }

    class Teacher:Person
    {
        public new void Say()
        {
            Console.WriteLine("Teacher");
        }
    }

    class Student:Person
    {
        public new void Say()
        {
            Console.WriteLine("Student");
        }
    }

}

  

时间: 2024-10-11 06:41:25

父类与子类的转换as,is的相关文章

父类到子类的转换和instance of运算符

父类到子类的转换和instanceof运算符 主讲教师:王少华 QQ群号:483773664 学习目标: 1)   父类与子类转换:向下转换 2)   掌握instanceof运算符的使用 一.  问题:实现主人与宠物的玩耍功能 (一)   需求: 和狗玩接飞船游戏,狗的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 (二)   实现思路 1)   给Dog类添加catchingFlyDisc方法,实现接飞盘功能: 2)   给Penguin类添加

第三节 父类到子类的转换和instance of运算符

父类到子类的转换和instanceof运算符 主讲教师:王少华 QQ群号:483773664 学习目标: 1)   父类与子类转换:向下转换 2)   掌握instanceof运算符的使用 一.  问题:实现主人与宠物的玩耍功能 (一)   需求: 和狗玩接飞船游戏,狗的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 (二)   实现思路 1)   给Dog类添加catchingFlyDisc方法,实现接飞盘功能: 2)   给Penguin类添加

跟王老师学多态(三) 父类到子类的转换和instance of运算符

父类到子类的转换和instanceof运算符 主讲教师:王少华 QQ群号:483773664 学习目标: 1)   父类与子类转换:向下转换 2)   掌握instanceof运算符的使用 一.  问题:实现主人与宠物的玩耍功能 (一)   需求: 和狗玩接飞船游戏,狗的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 (二)   实现思路 1)   给Dog类添加catchingFlyDisc方法,实现接飞盘功能: 2)   给Penguin类添加

继承 父类与子类的转换

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication3 { class shengwu { public void shengming() { Console.WriteLine("生物都有生命"); } public virtual void huxi() { Console.WriteLine("生物都呼吸!"); } } }

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

子类指针转换成父类指针时,指针值会变化

指针转换在C++中再正常不过了,特别是子类向父类的转换,一般情况下转换后指针值是不会变的.但是某些特殊情况,子类指针转换成父类指针,指针值会产生一定的偏移量,至于为什么就不清楚了.要确保指针值不变,可以先将指针转成void*,再根据实际情况强制转换成需要的类型就可以了. 本文地址:http://www.cnblogs.com/vcpp123/p/5902866.html 参考文章: C++多重继承下的指针类型转换 http://www.veryhuo.com/a/view/52953.html

父类和子类可以相互转化吗?

理论上说你可以在任何类型中转换,前题是你自己必须清楚你自己在做什么,准确一点说是知道编译器将会怎么做.父类和子类可以视做两个不同的数据类型,所以没有什么可以阻碍你强制转化的.从子类到父类,是由大变小,所以无妨;而从父类到子类,是从小变大,有的东西就不存在了,所以你自己必须清楚,基于这原则,编译器往往设定一些方法来警告你甚至阻止你. 从弗雷转到子类时,子类中的成员变量为0 p,li { white-space: pre-wrap } class Base { public: Base() {cat

1212面向对象--引用类型与值类型、命名空间与类库、继承(父类与子类)

五.引用类型与值类型 .NET将变量的类型分为值类型与引用类型.例如int和float之类的变量属于值类型,而“类“类型的变量属于引用类型. 值类型与引用类型的变量在使用上是有区别的. 值类型的变量在一定义之后就可以马上使用. 引用类型的变量定义之后,还必须用new关键字创建对象后才可以使用. 如上图,创建两个新的对象时,直接比较两个对象是否相等,返回的bool值为false.因为两个对象都是新开辟的一个空间变量,彼此没有任何关系,所有是不相等的. 如图2:1)创建的第一个新的对象ss1,给ss

20141214--C#父类,子类

首要: 子类 包含父类的所有的属性方法 所有子类都可以直接转化成父类类型 当父类类型变量里面存的是某个子类的对象的时候,才能转化成那个子类类型. 父类与子类的装换: Ren r = new Ren(); r = (Ren)m;//Man子类转换为Ren父类 Ren m1 = new Ren(); m1 = (Man)r;//转换成父类后再转换为子类时,只能转换成原先的子类, 不能转换成其他子类 需要使用强制装换. private与protected: private 只可在当前类中作为成员变量使