每个子类都可以覆写父类的方法
如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
如果去掉父类的方法,就失去了多态的特性
可以把父类的方法声明为抽象方法。
如果一个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. Confluence5.1 最新版的安装破解汉化
  2. jquery 添加 padding_【开发小技巧】11—如何使用JavaScript / jQuery为网站创夜间/高亮模式?...
  3. Redis进阶-Redis的惰性删除
  4. SAP C/4HANA到底包含哪些产品?
  5. 数据结构——链式队列解析(C语言版)
  6. 湖北大学 计算机考研,湖北大学考研难吗?一般要什么水平才可以进入?
  7. U Sparkle 开发者计划招募中!
  8. java工厂模式 uml_深入浅出设计模式-简单工厂模式
  9. php redis命令大全,redis命令大全参考手册
  10. rust 静态 android,rust android make
  11. Linux常用命令大全(归类)
  12. 浅谈WebService开发二(同步与异步调用)转
  13. mixamo骨骼_UE4骨骼重定向(二)借助插件Mixamo Converter快速操作Mixamo网站资源
  14. 北京化工大学寒假集训【BUCTOJ】(1)1-6题
  15. matlab读数据写入excel文件路径,MATLAB读取和写入Excel文件
  16. pyspark---agg的用法
  17. 日本RPA工程师的现状和未来
  18. Android微信代码
  19. 产品经理面试问题:上一家公司的离职原因
  20. 一万小时定律-二进制安全一路杀到黑

热门文章

  1. python快速编程入门课后题答案-python语言程序设计基础(嵩天)第四章课后习题部分答案...
  2. python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...
  3. python怎么输入代码-教你如何将自己的脚本代码放到服务器上运行
  4. python电脑下载网址-Python
  5. python27-python27安装
  6. python手机版怎么用-手机使用python操作图片文件(pydroid3)过程详解
  7. python官网的软件好用吗-为何强烈不推荐去学python?
  8. 网页版python叫什么-我不想浏览网页,那么我就用Python实现网页自动化朗读!
  9. python读取文件多行内容-使用python读取.text文件特定行的数据方法
  10. python画图代码彩虹-echarts绘制彩虹图