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();
            }
        }
    }
  • 相关阅读:
    sl跨域访问学习笔记2
    XAML标记扩展
    充分利用资源,实践中创新
    程序集版本号与文件版本号的区别
    项目管理: 软件质量的可靠保证
    未能将临时文件复制到输出目录中
    IBM DB2 UDB V8.1®,Oracle9i R2®,Microsoft SQL Server 2000® 技术比较分析
    Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结
    The remote procedure call failed and did not execute的解决办法
    快速解决IIS5故障一例
  • 原文地址:https://www.cnblogs.com/qicao/p/8934203.html
Copyright © 2011-2022 走看看