每个子类都可以覆写父类的方法
如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
如果去掉父类的方法,就失去了多态的特性
可以把父类的方法声明为抽象方法。
如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法:

  • 抽象方法用abstract修饰
  • 抽象方法没有任何执行语句
  • 因为无法执行抽象方法,因此这个类也必须声明为抽象类abstract class
  • 无法实例化一个抽象类。如果子类不是抽象类,依旧可以被实例化。

抽象类作用:

  • 抽象类用于被继承
  • 抽象类可以强迫子类实现其定义的抽象方法,否则编译错误
  • 抽象方法实际上相当于定义了规范。

面向抽象编程的本质:

  • 上层代码只定义规范 abstract class Person
  • 不需要子类就可以实现业务逻辑(正常编译)
  • 具体的业务逻辑由不同的子类实现,调用者并不关心
    Shape.java
public abstract class Shape {//抽象方法,用于计算面积public abstract double area();
}

Rect.java

public class Rect extends Shape{private final double width;private final double height;public Rect(double width, double height){this.height = height;this.width = width;}@Overridepublic double area() {return width * height;}
}

Circle.java

public class Circle extends Shape{private double radius;public Circle(double radius){this.radius = radius;}@Overridepublic double area() {return Math.PI * radius * radius;}
}

Hello.java

public class Hello {public static void main(String[] args){Shape s1 = new Rect(200,100);Shape s2 = new Circle(60);System.out.println(s1.area());System.out.println(s2.area());}
}

总结:

  • 抽象方法定义了子类必须实现的接口规范
  • 定义了抽象方法的类就是抽象类
  • 从抽象类继承的子类必须实现抽象方法
  • 如果不实现抽象方法,该子类仍是一个抽象类

转载于:https://www.cnblogs.com/csj2018/p/10274609.html

廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类相关推荐

  1. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday {//定义int常量public static final int SUN = 0;public static final int MON = ...

  2. 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码

    Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...

  3. php中接口与抽象类,php中的接口与抽象类及接口与抽象类的区别

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  4. 第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较

    一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离 ...

  5. java封装例题_java面向对象编程类的封装接口和基本类库练习题

    面向对象编程基本知识练习 一.判断题 1.不需要定义类,就能创建对象.() 2.构造方法用于给类的 private 实例变量赋值.() 3.对象一经声明就可以立即使用.() 4.在定义变量和方法时,必 ...

  6. 为什么派生的子类报错不能实例化抽象类_C# 接口与抽象类实例分析

    初学者在学习C#过程中,对面向对象概念,接口.抽象等关系往往难以准确理解.本文主要通过简单举例对接口.抽象类等概念进行简单说明,希望对初学者有所帮助,如有不对之处欢迎批评指正. 接口interface ...

  7. java抽象类和接口_Java抽象类和接口类

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...

  8. java接口可以扩展抽象类_Java—接口与抽象类

    1.语法层面上的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法: 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public sta ...

  9. java实体类实现抽象类_java接口、抽象类、实体类关系介绍

    接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型.没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承.在接口中声明的方法没有方法体. 抽象类:将类层次中共有 ...

最新文章

  1. 预热学习率的作用warmup
  2. 输入三个字符串按由小到大输出
  3. hibernate教程--一级缓存
  4. 数据结构-----二叉树,树,森林之间的转换
  5. string 字符串中字符无效_JavaScript中的字符串(string)到底是什么?
  6. java gc cms_Java垃圾收集器:G1GC何时将CMS强制退出?
  7. JDK 12,合并的收集器和命名的挑战
  8. c语言 feof_C语言 技能提升 系列文章(六)文件操作
  9. ElasticSearch可视化工具Dejavu安装使用
  10. StringBuilder与StringBuffer的一点笔记
  11. oracle基础知识文档,Oracle 基础知识分享PPT
  12. jQuery1.9.1源码分析--Animation模块
  13. Linux下C编程入门
  14. linux -初步认识之软件安装
  15. [莓控]BlackBerry7290用户指南(简体中文)
  16. freeswitch官方文档网站
  17. 找不到xinput1_3.dll怎么办?如何修复dll文件缺失
  18. 『Python开发实战菜鸟教程』实战篇:一文带你了解人脸识别应用原理及手把手教学实现自己的人脸识别项目
  19. 高新计算机考试试题ps,最新版计算机高新考试ps第1单元1-8.pdf
  20. 统计字符号串“aaaabbbccccddfggh”中字母个数或统计最多字母数;

热门文章

  1. 不懂编程可以自学python吗-为什么我建议你一定要学Python?
  2. python散点图拟合曲线-python散点图:如何添加拟合线并显示拟合方程与R方?
  3. python好找工作吗2017-你为什么不来了解一下Python?
  4. python urllib.request 爬虫 数据处理-python之爬虫(三) Urllib库的基本使用
  5. 零基础学python可以吗-零基础学习Python可以学会吗?你有哪些方法?
  6. python生成折线图-Python数据可视化 -生成数据之绘制折线图和散点图
  7. python自动测试p-python自动化测试报告(excel篇)
  8. python自学网站有哪些-分享干货:三个新手自学Python的网站!
  9. 学python的好处-python有什么优势
  10. python自带的shell是什么-python shell是什么东西