第10章 接口、继承与多态 抽象类和接口

一、抽象类

  在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。回想继承和多态原理,继承树中越是在上方的类越抽象,如:鸽子类继承鸟类、鸟类继承动物类等。在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图像,但它的子类却可以。

  抽象类的语法如下:使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。

  只要类中有一个抽象方法,此类就被标记为抽象类。

public abstract class Test{
    abstract void testAbstract(); //定义抽象方法
}

  

  从图中可以看出,继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖。

  这样在多态机制中,就可以将父类定义为抽象类,将draw()方法设置为抽象方法,然后每个子类都重写这个方法来处理。

  但这会导致程序中会有太多冗余的代码,同时这样的父类局限性很大,也许某个不需要draw()方法的子类也不得不重写draw()方法。

  如果将draw方法放置在另外一个类(下面介绍的接口)中,这样让那些需要draw()方法的类继承该类,而不需要draw()方法的类继承图形类,但所有的子类都需要图形类,因为这些类是从图形类中被导出的,同时某些类还需要draw()方法,但是在Java中规定,类不能继承多个父类,面临这种问题,接口的概念便出现了。

二、接口

  接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中所有方法都没有方法体。上面遇到的问题,可以将draw()方法封装到一个接口中,使需要draw()方法的类实现这个接口,同时也继承图形类,这就是接口存在的必要性。

  

  接口使用interface关键字进行定义,其语法如下:

public interface drawTest{
    void draw();//接口内的方法,省略abstract关键字
}备注:在接口中定义方法必须被定义public或abstract形式,其他修饰权限不被Java编译器认可,即使不讲该方法声明为public形式,它也是public   在接口中定义的任何字段都自动是static和final的

  一个类实现一个接口可以使用implements关键字,代码如下:

public class Parallelogram extends Quadrangle implements drawTest{
    ...//
}
时间: 2024-08-06 17:05:41

第10章 接口、继承与多态 抽象类和接口的相关文章

第六章 初始继承和多态

一:本章目标 ①:理解继承的概念 ②:使用继承建立父类和子类以及继承的传递性.单根性 ③:访问修饰符 ④:多态的概念 ⑤:会使用虚方法实现多态 二:所谓继承: 在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类为子类,冒号后面的类为父类.这种书写类的方式放映出来的关系就称为类的继承关系. 1.子类:派生类 父类:基类或者超类 2.满足什么条件的类可以使用继承?? 满足is a关系的两个类可以使用继承. 例如: 经理is a a 员工 程序员  is a 员工 学生 is

Hibernate逍遥游记-第10章 映射继承关系-002继承关系树中的根类对应一个表(discriminator、subclass)

1. 2. 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping 3 PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping > 6 7 &l

面向对象二 — — 继承、抽象类、接口

一.继承 extends 继承的特点:Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类 1.参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载. 2.返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载. 3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private) 4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常. 用supe

抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

C#面试:抽象类与接口

本人近日面试遇到此等问题.然后又一次补习了一下下.希望对同行们有所帮助. 一.抽象类: 抽象类是特殊的类,仅仅是不能被实例化:除此以外.具有类的其它特性:重要的是抽象类能够包括抽象方法,这是普通类所不能的.抽象方法仅仅能声明于抽象类中,且不包括不论什么实现.派生类必须覆盖它们. 另外,抽象类能够派生自一个抽象类,能够覆盖基类的抽象方法也能够不覆盖,假设不覆盖.则其派生类必须覆盖它们. 二.接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1.不能实例化: 2.包括未实现的方法声明:

java中抽象类和接口的区别?

简单来说,接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法, 一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现. 还有,接口可以实现多重继承,而一个类只能继承一个超类, 但可以通过继承多个接口实现多重继承, 接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用. 接口和抽象类都是继承树的上层,他

Java基础之抽象类与接口

1.抽象类 抽象就是从多个事物中将共性的,本质的内容抽取出来.在Java中用abstract关键字修饰class来表示抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. public abstract class Animal { } 关于抽象类和抽象方法的使用注意: (1)抽象类和抽象方法必须使用abstract关键字修饰. (2)抽象类不能实例化,即使有构造函数.只能使用多态的方法来实例化. abstract class Ani

抽象类和接口联系与区别

1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象. 2.抽象类要被子类继承,接口要被类实现. 3.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现 4.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量. 5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类.同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类. 6.

java提高篇(五)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal