黑马程序员_Java基础[16]_多态2

来源:互联网 发布:人工智能 视频分析 编辑:程序博客网 时间:2024/05/29 12:17
---------- android培训 、java培训、期待与您交流! ----------
 * 【多态】

 * 5、多态的应用
 *
 * 基础班学生:
 * 学习、睡觉
 * 高级班学生:
 * 学习、睡觉
 *
 * 可以将这两类事物进行抽取。
 *
 * 把事物不断抽象,找出的共性
 *
 * 对类型进行抽取,导致多态的产生,操作同一个大类型,对大类型中所有的小类型都能进行操作
 * 就因为这个思想,才提高了扩展性的思想

 *
 */
abstract class Stu{
    
    public abstract void study();
    public void sleep(){
        System.out.println(" tang sleep");
    }
}

class BaseStu extends Stu{
    public void study(){
        System.out.println(" base");
    }
    public void sleep(){
        System.out.println(" base sleep");
    }
    
}

class advStu extends Stu{
    public void study(){
        System.out.println(" adv");
    }
    public void sleep(){
        System.out.println(" adv sleep");
    }
}
class DoStu{
    public void doSome(Stu stu){
        stu.study();
        stu.sleep();
    }
}





public class Demo_Duotai3 {
    public static void main(String []args){
        DoStu ds=new DoStu();
        
        ds.doSome(new BaseStu());
        ds.doSome(new advStu());
        
        
    }
    
}
---------------------------------------------------------------------------------------------------------------------------
/*【多态】【有状态的时候返回看看第8天第4个视频。】
 * 6、多态出现在代码中的特点(多态使用的注意事项)
 */

class Fu1{
    void method1(){
        System.out.println("FU-1");
    }
    void method2(){
        System.out.println("FU-2");
    }
}

class Zi1 extends Fu1{
    void method1(){
        System.out.println("-1");
    }
    void method3(){
        System.out.println("-3");
    }
}



public class Demo_Duotai4 {
    public static void main(String []args){
        Fu1 f=new Zi1();
        f.method1();
        f.method2();
        //f.method3();   子类特有的方法,所以编译失败。f所属类型Fu1中没有3这个方法
        
        /*
         * 在多态【非静态】成员函数的特点
         * 在编译时期参阅引用类型变量所属的类型中是否有调用方法
         *                 如果有便通过,没有则编译失败

         * 在运行时期参阅对象所属的类中是否有调用方法。
         *
         * 【简单一点】就是:成员函数在多态调用时,编译看左边,运行看右边。
         *
         * 非静态有重写的特性
         * 上面很常见。


         * 下面两种情况很少见。
         * 设计到面试的环节:
         * 在多态中,成员变量的特点,无论编译和运行,都参考左边(引用性变量所属的类 )。
         *
         * 在多态中,静态函数的特点,无论编译和运行都看左边。

        在简单一点来说就是,非静态,左编右运,静态是编运看左
         *
         */
        
        
        /*
        Zi1 z=new Zi1();
        z.method1();
        z.method2();
        z.method3();
        */
        
    }
}


【应用】
/*
 * 多态小应用
 * 需求:
 * 电脑运行示例
 * 电脑运行基于主板。
 */


interface PCI{
    public void open();
    public void close();

}
class MainBoard{
    public void run(){
        System.out.println("MainBoard");
    }
    public  void usePCI(PCI p){// PCI p=NetCard()//接口型引用指向自己的子类对象。
        if(p!=null){
            p.open();
            p.close();
        }
        
    }
}
class NetCard implements PCI{

    public void open(){
        System.out.println("open");
    }
    public void close(){
        System.out.println("close");
    }

    
}



public class Demo_Duotai5 {

    
    public static void main(String[] args) {
        MainBoard mb=new MainBoard();
        mb.run();
        mb.usePCI(null);
        mb.usePCI(new NetCard());

    }

}




---------- android培训、 java培训、期待与您交流!----------
黑马官网: http://edu.csdn.net/heima
0 0