目录

抽象类和抽象方法

为什么要使用抽象类


抽象类和抽象方法

抽象类:使用abstract修饰的类就是抽象类。总结起来,抽象类的特性就是有得有失:

  • 得:就是可以设置抽象方法
  • 失:就是不能创建实例
  • 其他的普通类可以有的抽象类也可以有

抽象类的注意点

  1. 虽然抽象类不能创建实例,但他依然有构造器,它的构造器主要是供其子类构造器调用的
  2. 抽象类自己完全没有抽象方法
  3. 抽象类总是不能创建实例的 —— 即使它没有包含任何抽象方法

抽象方法:使用abstract修饰且没有方法体(即没有花括号的方法)

抽象方法的注意点

  1. 抽象方法没有方法体
  2. 只要在方法后出现花括号,即使花括号中没有任何代码,那也是方法体
  3. abstract不能与final同时出现:
    1. 对于abstract方法而言,该方法需要子类去重写该方法,final不允许被重写,因此不能同时出现
    2. 对于abstract类而言,该类是希望有子类去继承它的,final修饰的类是不允许被继承的
  4. abstract与static不能同时修饰方法(见注释1
  5. abstract和private不能同时修饰方法,因为abstract修饰的方法希望被子类重写,而private修饰的方法子类是无法获取的

为什么要使用抽象类

主要和“模板模式”结合在一起

需求场景:程序需要实现A方法,但是A方法又需要调用B方法。但此时,B方法暂时不知道如何实现(不同的子类对B方法的实现【是不同】)。此时就是需要把B方法定义成抽象方法。

Volume.java

//定义一个抽象类
public abstract class Volume {public Volume() {}// 定义一个抽象的实现求体积的方法public abstract double getVolume();
}

Cube.java


public class Cube extends Volume {// 定义成员变量,正方体的边长private double edge;// 定义一个无参数的构造器,一个有参数构造器public Cube() {}public Cube(double edge) {this.edge = edge;}// 因为成员变量时private修饰,所以需要setter和getter方法获取相关数据public double getEdge() {return edge;}public void setEdge(double edge) {this.edge = edge;}// 重写getVolume方法@Overridepublic double getVolume() {return edge * edge * edge;}}

Cylinder.java


public class Cylinder extends Volume {// 定义成员变量,圆柱体的底面半径和高private double radius;private double height;// 创建两个构造器,一个无参数构造器,一个有参数构造器public Cylinder() {}public Cylinder(double radius, double height) {this.radius = radius;this.height = height;}/// 因为成员变量时private修饰,所以需要setter和getter方法获取相关数据public void setRadius(double radius) {this.radius = radius;}public double getRadius() {return radius;}public void setHeight(double height) {this.height = height;}public double getHeight() {return height;}// 重写getVolume方法@Overridepublic double getVolume() {return Math.PI * radius * radius * height;}
}

AbstractTest.java


public class AbstractTest {public static void main(String[] args) {// 多态,向上转型Volume cylinder = new Cylinder(3.14, 5.56);Volume cube = new Cube(5.6);System.out.println("圆柱体的体积:" + cylinder.getVolume());System.out.println("正方体的体积:" + cube.getVolume());}
}

【注释1】当static修饰方法的时候,说明这个方法属于类本身。调用这个方法时,可以直接通过类调用。当使用abstract修饰该方法时,该方法是没有方法体的。此时,若通过类调用该方法,就会出现错误(调用没有方法的方法体)

【Java】6.5 抽象类相关推荐

  1. java中的抽象类和抽象方法

    知识点:java中的抽象类和抽象方法 关键字abstract意为抽象的,可以用来修饰类和方法,分别称作抽象类和抽象方法 抽象类一般在多态的场景中使用 一:抽象类(abstract class) 在类的 ...

  2. java笔记之抽象类和接口

    前言 java笔记之抽象类和接口是开发人员的设计工具 正文 1.抽象类 客观存在的一类事物,当这类事物都是抽象的,无法具体的描述. 1)语法: 修饰符 abstract class 类名{ } 2)特 ...

  3. java编程一般类抽象类的定义,Java编程基础抽象类

    本文主要是讲述Java编程基础-抽象类,更多Java技术知识,请登陆疯狂软件教育官网. 抽象类: 抽象:不具体,看不明白关键字abstract 抽象类的特点: 1.抽象方法只能定义在抽象类中,抽象类和 ...

  4. Java提高篇 —— 抽象类与接口

    一.前言 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间 ...

  5. Java 中的抽象类和接口

    Java 中的抽象类和接口 1.参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2.前言 有一次旁听面试的时候,听到面试官问了一句:既然 JDK8 中接口有了默认方法实现,那接口 ...

  6. Java中类、抽象类、接口之间的区别和联系。

    Java中类.抽象类.接口之间的区别和联系. 程序设计所面对的问题域--客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议).把客观世界中的事物映射到面 ...

  7. java接口和抽象类的区别(经典面试题)

    java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...

  8. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  9. Java复习之抽象类和接口

    Java复习之抽象类和接口 Java复习之抽象类和接口 什么是抽象类和接口 抽象类与接口的区别 什么情况下使用抽象类或接口 一个demo引起来的对于java方法区堆栈的研究 首先我们需要明白抽象类与接 ...

  10. Java 定义一个抽象类—水果,其中包括getWeight()方法,创建若干水果对象存放在一个水果类型的数组中,输出数组中所有水果的类型、重量。

    Java 定义一个抽象类-水果 其中包括getWeight()方法,编写程序分别创建苹果.桃子.橘子3个类,创建若干水果对象存放在一个水果类型的数组中,输出数组中所有水果的类型.重量. 抽象类Frui ...

最新文章

  1. java容量_Java集合类初始容量、加载因子、扩容增量
  2. 分支定界法上下界_分支定界(Branch-and-Cut)方法的逻辑
  3. pq 中m函数判断嵌套_Python中numpy的布尔判断、切片、维度变化、合并、通用函数...
  4. SAP License:MM中的几个概念
  5. vue中v-show v-if v-bind的使用
  6. Android 蓝牙扫描
  7. python3.5.4安装_linux-centos系统下安装python3.5.4步骤
  8. 视频html5播放器代码实例
  9. Redis全面实战教程
  10. 什么是抗攻击服务器?抗攻击服务器是如何防御攻击的?
  11. 计算机课玩游戏检讨书,上微机课玩游戏检讨书.doc
  12. FCC算法和数据结构 项目实战:罗马数字转换器
  13. Mini CFA 考试练习题 Microeconomics
  14. 2006年美国商业科技创新250强-----SUN公司第六!
  15. 手机端的日期选择的插件
  16. 亿级工具类APP头条数据聚合优化实践
  17. mini2440 -- TFTP方式下载u-boot
  18. 微信分享js 微信JS-SDK 微信分享接口开发(介绍版)
  19. JAVA10和11什么时候_Java 11 正式发布 支持期限至2026年9月
  20. 什么是Resnet50模型?

热门文章

  1. nodejs中的全局函数setTimeout/clearTimeout,setInterval/clearInterval,unref/ref
  2. spring IOC 注解@Autowired
  3. wikioi 1160 蛇形矩阵
  4. [ZZ88]送给即将毕业奔三的男人们的16条忠告
  5. stm32之spi之NSS管脚信号
  6. 深度探索C++ 对象模型(7)-Data member的布局(虚继承)
  7. MySQL—不相关子查询(单行子查询)
  8. 通过TA binary查看TA的uuid和stack
  9. 自用零散博文-route_state.ts
  10. mac包安装kafka