码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-04-24 23:22:58      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:构造   strong   mes   调用   参数   main   stat   style   line   

在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();
        }
    }
}

 

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

标签:构造   strong   mes   调用   参数   main   stat   style   line   

原文地址:https://www.cnblogs.com/qicao/p/8934203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!