欢迎光临散文网 会员登陆 & 注册

150天打卡day16_抽象方法和抽象类

2021-04-27 10:59 作者:关阿姨的Java日记  | 我要投稿

回顾

  • static:静态的

  • 静态变量:类,方法区,一份,类名点来访问

    所有对象所共享的数据(图片、音频、视频等)

  • 静态方法:类,方法区,一份,类名点来访问

    • 没有隐式this传递,不能直接访问实例成员方法的操作仅与参数相关而与对象无关

    • 静态块:类,在类被加载期间自动执行,一次

    • 初始化/加载静态资源(图片、音频、视频等)

  • final:不可改变的、最终的,变量不能被改变,方法不能被重写,类不能被继承

  • static final:常量

    • 必须声明同时初始化,类名点,不能改,

    • 建议:所有字母大写,多个单词_分隔

    • 一个数永远不变,常常使用

what

面向对象特征:封装、继承和多态

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多

个接口。

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用

来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象

类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的

访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常

在设计阶段决定要不要设计抽象类。

 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

 

why

问:一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊?

答:其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方

法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要在父类里写。

抽象方法

abstract 定义的方法称之为是抽象方法,抽象方法没有方法体,在小括号后面用“分号”结尾。

通过具体的案例来讲解抽象类的抽象方法。

案例:做加减法运算器

以上两个类存在大量的代码,这时就可以向上抽取出一个父类Cal类,让所有的加减乘除子类继承于Cal类

由于getResult方法具体的实现不明确,不完整,所以可以定义为抽象方法,没有方法体,小括号后直接用分号结尾。

 public abstract int getResult();

  • 由abstract修饰

  • 抽象方法必须放在抽象类中

  • 只有方法的定义,没有具体的实现(连大括号都没有)

  • 父类的抽象方法必须由子类重写实现。

抽象类

继承抽象类

抽象类不能实例化,一个类继承了抽象类后必须重写父类的抽象方法,不同的子类可以有不同

的实现。

总结:

  • 由abstract修饰

  • 包含抽象方法的类必须是抽象类---抽象方法是不完整的放在不完整的类中

    •     不包含抽象方法的类也可以声明为抽象类------我乐意

  • 抽象类不能被实例化(单独存在没有意义,类是为了生产对象的)

  • 抽象类是需要被继承的,子类:

    • 重写抽象类的所有抽象方法----变不完整为完整

    • 也声明为抽象类--------------一般不这么做

抽象类的意义

  • 封装子类共有的属性和行为     (代码复用)

  • 为所有子类提供统一的类型        (向上造型)

  • 可以包含抽象方法,为所有的子类提供了统一的入口,每个子类的实现不同,但是入口是一致的。

案列:根据周长计算圆形和正方形的面积

注:正方形的面积公式为:0.0625*c*c。圆形的面积公式为:0.0796*c*c,其中,c表示图形的周长。

 

  • 步骤一:创建抽象类Shape,它提供所有属性所共同拥有的方法和属性,声明抽象方法area()求面积,只是提供了对外统一的入口,至于子类怎么计算,与他无关。

  • 步骤二:声明子类 Square(正方形)和 Circle(矩形)继承于Shape父类,并实现抽象的area()方法。

    • Triange(三角形)类

  • Circle(圆形)类

 

欢迎👏点赞+关注,笔芯❤️


150天打卡day16_抽象方法和抽象类的评论 (共 条)

分享到微博请遵守国家法律