8,多态

//判断指向的类型符合什么类型的时候
//判断的时候父类的对象必须写在子类的对象的下面
//使用的场景:子类的种类有限,当传的类型需要进行其他操作,需要调用特有方法时

if(a instanceof Cat)
        {
            Cat c = (Cat)a;
            c.catctMouse();
        }
//类型提升  向上转型(转成父类型)
//将父类的引用转成子类的引用(向下转型)
//此操作不被允许,可以将父类的引用转为子类引用,不可以将父类的对象强转为子类的引用
//多态始终是子类对象的操作
      
        Animal a=new Cat();//向上转型
Cat c
=(Cat)a;//向下转型

在多态中,成员函数的特点(编译看左边,运行看右边)

(1)编译的时候看引用的类型中是否有调用的方法,如果有,编译通过,没有,失败

(2)在运行时,看对象的类中是否有调用的方法。

涉及到面试的环节()

在多态中,成元变量的特点:编译运行都看左边(引用)

public class test{

public static void main(String[] args) {
    fu f= new zi();
    System.out.println(f.s);
}
}
class fu{
    String s="llll";
}
class zi extends fu{
    String s="aaa";

}

在多态中静态成员函数的特点,编译运行都看左边(父类运行父类,子类运行子类的)

public class test{
    public static void main(String[] args) {
        fu f= new zi();
        f.m4();
    }
}
class fu{
    static void m4(){
        System.out.println("KKK");
    }
}
class zi extends fu{
    static void m4()
    {
        System.out.println("llll");
    }
}

多态主板实例(扩展槽的实现)

package test;
//电脑运行依附于主板(主板运行了,电脑就运行了)
interface PCI{
    public void open();
    public void end();
}
public class test{
    public static void main(String[] args) {
        diannao d=new diannao();
        d.yunxing();
        d.usePCI(new netCard());    }
}
class zhuban{
    public void yunxing(){
        System.out.println("主板运行");
    }
    
}
class diannao{
    zhuban z=new zhuban();
    public void yunxing()
    {
        z.yunxing();
    }
    public void useNetcard(netCard n)
    {
                n.start();
                n.end();
    }
    public void usePCI(PCI p)
    {
        p.open();
        p.end();
    }
    
}
class netCard implements PCI{
    @Override
    public void open() {
        // TODO Auto-generated method stub
        System.out.println("网卡开启");
    }
    @Override
    public void end() {
        // TODO Auto-generated method stub
        System.out.println("网卡关闭");
    }
}
原文地址:https://www.cnblogs.com/exexex/p/8393016.html