abstract 和一点泛型


Animal是父类,hippo是子类

Animal ahippo = new hippo();

abstract

  • abstract 类可以扩展(增加子类),但不能直接实例化。抽象类最大的悲哀是没有实体
  • abstract 方法不在声明它的类中实现,但必须在某个子类中重写。

image.png

abstract 应注意的事

  • 抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例,也就是可以使用抽象类来充当形参,实际实现类作为实参,也就是多态的应用。
  • 构造函数和静态函数以及final修饰的函数不能使用abstract修饰符。
  • 如果试图创建一个抽象类的实例就会产生编译错误。
  • 如果一个类是非抽象类却包含一个抽象方法,就会产生编译错误。
  • 抽象类中有构造函数。如果抽象类是父类,需要给子类提供实例的初始化

abstract 关键字和哪些关键字不能共存?

  • final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
  • private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。
  • static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。

https://blog.csdn.net/eff666/article/details/52324985


终极对象object有什么

  • equals()
  • getClass()
  • hashCode()
  • toString()

接口(纯抽象)

多继承


泛型(只在编译有效)

泛型类

[图片上传失败...(image-916ce8-1565101604071)]

泛型接口

//定义一个泛型接口
public interface Generator<T> {
    public T next();
}
当实现泛型接口的类,未传入泛型实参时
  • 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
  • 即:class FruitGenerator<T> implements Generator<T>{}
  • 如果不声明泛型,如:class FruitGenerator implements Generator<T>,编译器会报错:"Unknown class"
当实现泛型接口的类,传入泛型实参时:
  • 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T>
  • 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。
  • 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型
  • 即:Generator<T>,public T next();中的的T都要替换成传入的String类型。
public class FruitGenerator implements Generator<String>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.介绍 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使...
    走着别浪阅读 293评论 0 1
  • “泛型”这个术语的意思是:"适用于许多许多的类型”。如何做到这一点呢,正是通过解耦类或方法与所使用的类型之间的约束...
    王侦阅读 1,172评论 0 0
  • 一:什么是泛型 泛型在我们的代码中使用非常广泛的一部分知识,今天就系统的把泛型总结一下,并记录自己的学习历程...
    蓉漂里的小白阅读 613评论 0 2
  • C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate...
    OctOcean阅读 2,263评论 0 4
  • 《文心》是由著名教育大师也是一对儿女亲家夏丏尊、叶圣陶先生合著的书,初衷是为了指导中学生阅读写作。 虽说是为中学生...
    榕翼阅读 938评论 0 1