zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    时间序列理论专题之二 时间序列的表达
    Ado.net Entity FrameWork的性能问题
    时间序列专题之三 时间序列的分段线性表示
    Tfs 2010使用小技巧
    时间序列理论专题之一 前言
    绝大多数新技术的学习,都是浪费生命
    Tfs2010简体中文版:翻译永远是问题
    MSsql 查询时默认是不区分大小写。 可以用语句强制sql语句查询时区分大小写 狼
    将.NET dll注册到GAC(Global Assembly Cache)中 狼
    js重载 狼
  • 原文地址:https://www.cnblogs.com/qicao/p/8934203.html
Copyright © 2011-2022 走看看