java里面的向上造型是什么?_?抽象类和接口有什

2019-10-07 13:09 来源:未知

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  例如,假设我们有很多箱子,每个箱子里都装有不同的水果,我们需要找到一种方法能够通用的处理任何一箱水果。更通俗的说法,A是B的子类型,我们需要找到一种方法能够将CA类型的实例赋给一个CB类型的声明。

  为了完成这种操作,我们需要使用带有通配符的扩展声明,就像下面的例子里那样:

  我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。

  接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,但是我们要明确一点就是,接口本身就不是类。 接口是用来建立类与类之间的协议,它所提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必须要实现该接口的所有方法,通过使用implements关键字,他表示该类在遵循某个或某组特定的接口,同时也表示着“interface只是它的外貌,但是现在需要声明它是如何工作的”。

  抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

  设计层次不同。对于抽象类而言,它是自下而上来设计的,我们要先知道子类才能抽象出父类,而接口则不同,它根本就不需要知道子类的存在,只需要定义一个规则即可。

  Java中的interface实现了函数多态性,并且实现了完全抽象的类。在这里还要提一下引用。因为interface实现了完全抽象的类,在接口中定义的方法完全看不到任何实现,而且也不能有任何的实现,接口中声明的类必须在引用其的类中实现。而多态性的实现正是通过不同引用中的不同的方法实现。

  C++中的虚函数也和Java中接口类似,C++中的虚函数同样是将接口和实现分离,从而实现多态性。为了使用多态性,需要在基类中使用virtual来声明虚函数。所以,虚函数是在基类中定义,在其子类中重写实现,也可重写基类的函数。在使用虚函数的的时候,需要定义基类的指针来使用虚函数,否则就失去了虚函数的意义。

  其实两者都是为了实现多态性而存在,都需要通过继承来实现,只是Java中称为引用,与C++中的继承也是大同小异。

TAG标签:
版权声明:转载须经版权人书面授权并注明来源