• Java多态


    一、引例

    class 动物
    {}
    
    classextends 动物
    {}
    
    classextends 动物
    {}
    
    猫 x = new 猫();
    
    动物 x = new 猫();//一个对象,两种形态。

    猫这类事物即具备者猫的形态,又具备着动物的形态,这就是对象的多态性。简单说:就是一个对象对应着不同类型。

    二、继承让类之间产生关系,给多态提供了前提。

    多态的前提:
    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 catchMouse()
        {
            System.out.println("抓老鼠");
        }
    }
    
    class Pig extends Animal
    {
        void eat()
        {
            System.out.println("饲料");
        }
        void gongDi()
        {
            System.out.println("拱地");
        }
    }
    
    
    class DuoTaiDemo 
    {
        public static void main(String[] args) 
        {
            
            Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是无法访问猫的特有功能。
                                  //作用就是限制对特有功能的访问。
                                  //专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。目的是:1.提高扩展性 2.限制子类的特有功能
    //        a.eat();        //可以调用
    //        a.catchMouse(); //不能调用后期子类的特有内容
                                  //如果还想用具体动物猫的特有功能。 
                                  //你可以将该对象进行向下转型。
    //        Cat c = (Cat)a;     //***向下转型的目的是为了使用子类中的特有方法。*** c.catchmouth()
    //        c.eat();
    //        c.catchMouse();
    
    //        注意:对于转型,自始自终都是子类对象在做着类型的变化。
    //        Animal a1 = new Dog();
    //        Cat c1 = (Cat)a1;//ClassCastException 类型转换异常,不能把狗转成猫。
    
    
            /*
              Cat c = new Cat();
    
    //        Dog d = new Dog();
    //        多种调用方式
    //        c.eat();
              method(c);
    //        method(d);
    method(new Dog());
    */ } public static void method(Animal a)//Animal a = new Dog(); { a.eat(); if(a instanceof Cat)//instanceof:用于判断对象的具体类型。只能用于引用数据类型判断 //通常在向下转型前用于健壮性的判断。 { Cat c = (Cat)a; c.catchMouse(); } else if(a instanceof Dog) { Dog d = (Dog)a; d.lookHome(); } else { } } /*麻烦 public static void method(Cat c) { c.eat(); } public static void method(Dog d) { d.eat(); } */ }
  • 相关阅读:
    Alert弹出框处理
    python自动化测试
    is_selected()检查是否选中该元素
    is_enabled()检查元素是否可以编辑 如文本框
    is_displayed()检查元素是否可见
    text获取元素的文本
    back()是返回,也就是说,先加载地址到A页面,再打开页面到B页面,调用 back()方法,就返回到了A页面
    pyinstaller实现将python程序打包成exe文件
    读写excel文档
    操控MySQL数据库
  • 原文地址:https://www.cnblogs.com/kkkky/p/6395584.html
Copyright © 2020-2023  润新知