Java —— abstract关键字

abstract关键字

1.抽象类与抽象方法

  • 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。
  • 有时将一个父类设计得非常抽象,以至于它没有具体的实例,只提供该顶层类的功能(只有顶层抽象方法声明,无方法体,由子类去实现具体功能)这样的类叫做抽象类
  • 类的设计应该保证父类和子类能够共享特征。

2.案例

描述:计算几何图形的面积、周长。“几何图形”是模糊的,不确定的,故声明为抽象类,其功能为计算面积和周长,由于不知道具体是那种图形,故声明为抽象方法,由子类实现具体功能。

abstract class GeometricObject{  //几何图形
    //面积(声明为抽象方法)
    //周长(声明为抽象方法)
}

class Circle extends GeometricObject{  //圆
    //面积(需要实现/重写父类中的抽象方法)
    //周长(需要实现/重写父类中的抽象方法)
}

class Rectangle extends GeometricObject{  //矩形
    //面积(需要实现/重写父类中的抽象方法)
    //周长(需要实现/重写父类中的抽象方法)
}

3.abstract可以修饰:类、方法

  • abstract修饰类

    • 此类称为抽象类
    • 抽象类不能实例化
    • 抽象类中是包含构造器的,因为子类对象实例化时,需要直接或间接地调用到父类的构造器(加载需要用到的属性、方法)
    • 抽象类中可以没有抽象方法。反之,抽象方法所在的类,一定是抽象类【保证(非静态的)抽象方法不能被调用(因为无方法体),即保证不能有对象(即将类声明为abstract的)】
  • abstract修饰方法

    • 此方法称为抽象方法
    • 抽象方法只有方法的声明,没有方法体
    • 抽象方法其功能是确定的(通过方法的声明即可确定),只是不知道如何具体实现(体现为没有方法体)
    • 子类必须重写父类中所有的抽象方法,否则此子类仍然为抽象类

4.abstract不能使用的场景

  • abstract 不能修饰哪些结构

    • 属性(无意义)
    • 构造器(构造器需要有方法体供子类对象实例化)
    • 代码块(无意义)
  • abstract 不能与哪些关键字共用?(自洽)

    不能使用abstract修饰私有方法、静态方法、final方法、final类

    • 私有方法不能重写
    • 避免静态方法使用类进行调用
    • final方法明确不能被重写
    • final修饰的类不能有子类
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值