抽象类和接口

抽象类的用法

  • 概念:客观世界中相类似的事物经过分析抽象就形成了类,(类实例化就变成了对象)。

抽象类

  • 抽象类可以有构造函数,是为子类准备的,在被继承的时候,子类用super()调用父类的构造函数
  • 一个类没有足够明确的信息来描述刻画对象时,这个类就可以定义成抽象类。
  • 格式:abstract class 类名 { //抽象类 …… //类体 }
  • 子类无需定义成abstract
  • 抽象类的作用
      1. 子类可以直接继承抽象类的属性和已经实现的方法;
      1. 为子类的方法制定了规范,因为子类必须按照抽象类中定义的抽象方法的名称、格式来实现抽象方法;
      1. 子类可以按照自己的情况来个性化实现抽象方法,从而实现了多态。
      1. 抽象类不能直接用new实例化,抽象类可以被继承,所以不允许被定义成final类;

抽象方法

  • 一个方法不能明确如何实现时,这个方法就要定义成抽象方法。
  • 格式:[修饰符] abstract 返回值类型 方法名([参数列表]);
  • 子类中的方法无需定义成abstarct
  • 抽象方法只有声明,没有实现;
  • 包含抽象方法的类必须定义成抽象类;

转型

  • 向上转型
    • 把一个子类的对象转成一个父类的对象
    • Shape shape1=new Circle(3);//shape 是父类,Circle是子类
    • 需要有相同的构造方法
    • 安全
  • 向下转型
    • 把一个父类对象转到一个子类对象
    • 需要有相同的构造方法
    • Circle c1=(Circle)shape1 //shape 是父类,Circle是子类

接口

  • 定义
    • 是一些抽象方法的声明和集合,不同的类可以有不同的实现。
    • 接口的定义跟外部类相似,只能定义成public权限或者默认权限。
    • 一个类只能继承另外一个类,但一个接口可以同时继承多个接口,多个接口之间用英文逗号分隔开
    • 没有构造函数
  • 格式
    • [public] interface 接口名 [extends 父接口名列表] { [public] static final 类型 varable=value;//常量列表 [public] abstract 类型 methodName(参数列表);//抽象方法列表 }

接口与抽象类

  • 接口比抽象类更抽象,主要差别
    • 类能实现多个接口,只能继承一个类,抽象类的子类仍可实现接口。接口可以支持多继承;
    • 抽象类中可以有普通方法,接口里的方法都是抽象方法,且都是public方法;
    • 抽象类中的成员变量可以被不同的修饰符来修饰,可以有实例变量,也可以有类变量,接口中的成员变量是public、static、final的变量;
    • 抽象类中有构造方法,接口中不能有构造方法。
  • 应用场景
    • 把现实问题抽象出来后更符合类的特征,抽象类
      • 具有实例变量、非抽象的方法
    • 只能抽象出需要规范的功能方法,接口
      • 这些方法不知道如何实现,需要在子类再实现,不能抽象出实例变量,

一个类实现接口

  • 用implements关键字
    • 类修饰符] class 类名[ extends 父类名 ][ implements 接口名列表 ] { 成员变量定义; 成员方法定义; }

多态

  • 概念:实现接口的多个类 or 一个父类的多个子类虽然有相同的方法,但是具有不同的表现方式。
  • 两种实现形式
    • 方法的重载
      • 一个类中定义了多个名字相同、参数不同的方法
    • 方法覆盖
      • 概念:子类覆盖父类的方法类实现接口的方法

内部类

  • 概念
    • 把类定义在另一个类的里面
    • 属于外部类的成员,可以很方便的访问外部类定义的成员变量和成员方法
  • 4种形式
    • 实例成员内部类
      • 类体内部、方法外面,与实例变量的地位一样
      • 属于外部类的对象所有,存在于对象的内存空间
      • 创建了外部类的对象后,才能使用该内部类
      • notion image
    • 静态内部类
      • 相当于内部类定义成static
      • 存在于外部类的内存空间
      • 静态内部类不能访问外部类的实例变量和实例方法,只能访问外部类的static的成员变量和成员方法。
      • notion image
    • 局部内部类
      • 方法体内的类
      • 作用域只是所在的方法内
      • notion image
    • 匿名内部类
      • 没有名字的内部类
      • 一般用在图形界面中,用于做事件监听器
      • 创建匿名内部类必须事先有一个接口或者父类,把内部匿名类定义为接口的一个实现类或者是某个父类的子类。

面向接口编程

  • 先把客户的业务逻辑功能提取出来,作为接口,设计系统时主要设计各种接口,通过各种接口之间的交流形成一个系统,而每种接口的具体行为表现交给接口的各种实现类来完成
  • 将具体接口逻辑与实现分开,减少了各个模块之间的相互依赖。当某个实现类变化时,不需要对已经编写的系统进行改动,添加新的实现类就可以了,不用担心新改动的类对系统的其他模块造成影响。其遵循的思想是:对扩展开放,对修改关闭。
 
Prev
继承
Next
异常
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++