Java 关于多态性

Java 关于多态性,java,polymorphism,overriding,Java,Polymorphism,Overriding,Java中的多态性表示通过重写子类方法可以实现的许多形式。关于允许传入泛型值的泛型,例如ArrayList。这是多态性概念的一部分吗? CheersPolymorhphism不能应用于泛型类型。 虽然字符串扩展了对象,数组列表不能用于引用数组列表 Object obj=new String();//好啊 ArrayList=新建ArrayList();//不好 泛型和多态性是两件不同的事情 泛型主要用于指定所需的类型。可以使用通配符定义一系列类型。例如,java中的多态性可以通过两种方式在jav

Java中的多态性表示通过重写子类方法可以实现的许多形式。关于允许传入泛型值的泛型,例如
ArrayList
。这是多态性概念的一部分吗?
Cheers

Polymorhphism不能应用于泛型类型。 虽然
字符串
扩展了
对象
数组列表
不能用于引用
数组列表

Object obj=new String();//好啊
ArrayList=新建ArrayList();//不好

泛型和多态性是两件不同的事情


泛型主要用于指定所需的类型。可以使用通配符定义一系列类型。例如,java中的多态性可以通过两种方式在java中实现

  • 静态(重载-编译时)
  • 动态(覆盖-运行时)
  • 关于你的问题


    是的,它可以通过重写子类中的方法来完成。您也可以在重载和重写的参数中使用genrics对象。

    在Java中,将对象用于多态性被认为是一种不好的模式。它并没有像接口那样为您提供保证和类型安全性

    List<Object> animals = new ArrayList<Object>();
    animals.add(new Sheep());
    animals.add(new Cat());
    // This will throw us an error! (ClassCastException)
    Cat cat = (Cat) animals.get(0)
    
    List animals=new ArrayList();
    动物。添加(新绵羊());
    添加(新的Cat());
    //这将给我们带来一个错误!(ClassCastException)
    猫=(猫)动物。获取(0)
    
    上面演示的错误无法在编译时捕获,只有在运行时发生错误时才会抛出。如果我们创建了一个动物界面,我们本可以完全避免这个错误

    interface Animal {
         //other methods you need to hide through polymorphism
         void sound();
    }
    List<Animal> animals = new ArrayList<Animal>();
    // Sheep and Cat implement the Animal interface
    animals.add(new Sheep());
    animals.add(new Cat());
    // No error
    Animal animal = animals.get(0)
    // This will through a COMPILE TIME error
    Cat cat = animal.get(1);
    
    界面动物{ //需要通过多态性隐藏的其他方法 虚无的声音(); } 列出动物=新建ArrayList(); //绵羊和猫实现了动物接口 动物。添加(新绵羊()); 添加(新的Cat()); //无误 动物=动物。获取(0) //这将导致编译时错误 猫=动物。获取(1);
    这显示了一种更好的实现多态性的方法,我们创建了一种更安全的方法,可以在编译时而不是运行时进行检查。尽可能避免使用Object,可能有更好的界面可供您设计或使用。

    我认为此链接可能包含您感兴趣的信息:。它涵盖了不同类型的多态性,包括参数多态性,这正是您在这里讨论的。许多人倾向于从面向对象编程模型的角度考虑多态性,但事实是多态性是一个更广泛的概念,在其他编程范例中,它以不同的方式实现。在Haskell或SML等函数式编程语言中,参数多态性是关键。Java泛型与它有很多相似之处。
    List<Object> animals = new ArrayList<Object>();
    animals.add(new Sheep());
    animals.add(new Cat());
    // This will throw us an error! (ClassCastException)
    Cat cat = (Cat) animals.get(0)
    
    interface Animal {
         //other methods you need to hide through polymorphism
         void sound();
    }
    List<Animal> animals = new ArrayList<Animal>();
    // Sheep and Cat implement the Animal interface
    animals.add(new Sheep());
    animals.add(new Cat());
    // No error
    Animal animal = animals.get(0)
    // This will through a COMPILE TIME error
    Cat cat = animal.get(1);