• c#中的里氏转换和Java中强制类型转换在多态中的应用


    在c#中:

    注意:
    子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数。
    如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员。但是父类永远都只能使用自己的成员,而不能使用子类的成员。
    子类之间也不能互相使用对方的成员。
    里氏转换的概念:
    1)、子类可以赋值给父类
    2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
    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();
            }
        }
    }
  • 相关阅读:
    数据库存储过程语法及实例
    springboot2配置JavaMelody与springMVC配置JavaMelody
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class java.lang.Integer'
    ajax表单提交执行成功但是没有执行回调函数,并且post变get了
    SpringMVC——重定向跳转传值
    thymeleaf中跳转地址的使用
    solr安装与配置
    redis集群redis-cluster搭建
    nginx安装手册
    Linux忘记root用户的密码
  • 原文地址:https://www.cnblogs.com/qicao/p/8934203.html
Copyright © 2020-2023  润新知