• java===多态性


    package cn.java;
    /**
     * 对象的多态性
     * 父类型指向子类对象
     * 简单说,就是一个对象对应着不同类型,多态在代码中的体现,
     *      父类或者接口的引用指向其子类的对象。
     *      
     * 多态的好处:
     * 提高了代码的扩展性,前期定义的代码可以使用后期的内容。
     * 多态弊端:
     * 前期定义内容不能调用后期子类特有内容
     * 多态的前提:
     * 1、必须由关系,继承或者实现。
     * 2、要有覆盖
     * */
    abstract class Animal{
        abstract void eat();
    }
    class Dog extends Animal{
        void eat(){
            System.out.println("啃骨头");
        }
        void lookHome(){
            System.out.println("看家");
        }
    } 
    class Cat extends Animal{
        void eat(){
            System.out.println("吃鱼");
        }
        void play(){
            System.out.println("抓老鼠");
        }
    }
    public class Javaduotai {
    
        public static void main(String[] args) {
    //        Cat c=new Cat();
    //        c.play();
    //        method(c);
    //        Dog D=new Dog();
    //        method(D);
            Animal animal=new Cat();//自动类型提升,猫对象提升为动物类型。不能叫小动物去抓老鼠,所以不能使用猫的特有方法;
            animal.eat();//作用就是限制对特有功能的访问。
    //如果想用猫内特有方法,可以将该对象进行向下转型。
            Cat c1=(Cat)animal;//向下转型,是为了使用子类的特有方法
            c1.play();
            /**注意:对于转型,自始至终都是子类对象在做着类型的变化。不能new Dog() 然后转成Cat*/
            method(new Dog());
        }
        public static void method(Animal A){//多态Anima A=c或者D
            A.eat();
            if(A instanceof Cat)//instanceof,用于判断对象的具体类型,只能用于引用数据类型的判断。
                //通常在向下转型前用于健壮性判断;
            {
            Cat cat=(Cat)A;
            cat.play();
            }else if(A instanceof Dog)
            {
                Dog dog=(Dog)A;
                dog.lookHome();
            }
        }
    
    }
    package cn.java;
    /**多态时:
     * 1、成员变量特点
     * 编译时:参考引用型变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败。
     * 运行时:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员
     * 单间说:编译时和运行时参考等号的左边,哦了。
     * 2、成员函数特点
     * 编译时:参考引用型变量所属的类中是否有调用的函数,有,编译成功,没有编译失败。简单说就是看父类中是否有想对应方法或者属性,有就编译成功,没有编译失败
     * 运行时:参考对象所属的类中是否有调用的函数。
     * 简单说:编译看左边,运行看右边
     * 3、静态函数的特点
     * 编译时:参考引用类型变量所属的方法中是否存在调用的静态方法
     * 运行时:参考引用类型变量所属的方法中是否存在调用的静态方法
     * 简单说:都看右边*/
    class F1{
        int  num=3;
        void show(){
            System.out.println("f   show");
        }
        static void tell(){
            System.out.println("a");
        }
    }
    class Z1 extends F1{
        int num=4;
        void show(){
            System.out.println("Z show");
        }
        static void tell(){
            System.out.println("b");
        }
    }
    public class Javaduotai2 {
    
        public static void main(String[] args) {
            F1 f1=new Z1();
            System.out.println(f1.num);//3
            f1.show();
            f1.tell();//静态函数不涉及多态 原因是可以直接使用类名调用F1.tell();z1.tell();
            // TODO Auto-generated method stub
    
        }
    
    }
    package cn.java;
    /**
     * 定义USB接口规则,从而降低笔记本与外设设备的耦合性,同时实现功能扩展*/
    interface USB{
        public void open();
        public void close();
    }
    class Mouse implements USB{
        public void open(){
            System.out.println("鼠标连接成功");
        }
        public void close(){
            System.out.println("鼠标拔出");
        }
    }
    class Upan implements USB{
        public void open(){
            System.out.println("Upan连接成功");
        }
        public void close(){
            System.out.println("Upan拔出");
        }
    }
    public class JavaInterface {
    
        public static void main(String[] args) {
            useUSB(new Upan());
            useUSB(new Mouse());
    
        }
        public static void useUSB(USB u){
            if(u!=null){
            u.open();
            u.close();}
        }
    
    }
  • 相关阅读:
    DesignPattern系列__10单例模式
    DesignPattern系列__09设计模式概述
    DesignPattern系列__08UML相关知识
    DesignPattern系列__07合成复用原则
    DesignPattern系列__06迪米特原则
    爬取猫眼电影top100电影
    安卓微信对接H5微信支付出现“商家参数有误,请联系商家解决”的问题处理
    python 通过使用pandas的实现的Excel的批量转换CSV文件的处理
    输入一个字符串,判断字符串中最大对称字串的长度
    面向对象六大设计原则(转载)
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6558559.html
Copyright © 2020-2023  润新知