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

猜你喜欢

转载自www.cnblogs.com/qicao/p/8934203.html