使用抽象类应该注意的几个要点:

  1. 包含一个或者多个抽象方法的类必须被声明为抽象类.
  2. 将类声明为抽象类,不一定含有抽象方法.
  3. 通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.
  4. 抽象类不可以被实例化.即不能创建这个类的对象
实例代码:
  1. import java.util.*;
  2.  
  3. /**
  4. * This program demonstrates abstract classes.
  5. * @version 1.01 2004-02-21
  6. * @author Cay Horstmann
  7. */
  8. public class PersonTest
  9. {
  10. public static void main(String[] args)
  11. {
  12. Person[] people = new Person[2];
  13.  
  14. // fill the people array with Student and Employee objects
  15. people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
  16. people[1] = new Student("Maria Morris", "computer science");
  17.  
  18. // print out names and descriptions of all Person objects
  19. for (Person p : people)
  20. System.out.println(p.getName() + ", " + p.getDescription());
  21. }
  22. }
  23.  
  24. abstract class Person
  25. {
  26. public Person(String n)
  27. {
  28. name = n;
  29. }
  30.  
  31. public abstract String getDescription();
  32.  
  33. public String getName()
  34. {
  35. return name;
  36. }
  37.  
  38. private String name;
  39. }
  40.  
  41. class Employee extends Person
  42. {
  43. public Employee(String n, double s, int year, int month, int day)
  44. {
  45. super(n);
  46. salary = s;
  47. GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
  48. hireDay = calendar.getTime();
  49. }
  50.  
  51. public double getSalary()
  52. {
  53. return salary;
  54. }
  55.  
  56. public Date getHireDay()
  57. {
  58. return hireDay;
  59. }
  60.  
  61. public String getDescription()
  62. {
  63. return String.format("an employee with a salary of $%.2f", salary);
  64. }
  65.  
  66. public void raiseSalary(double byPercent)
  67. {
  68. double raise = salary * byPercent / 100;
  69. salary += raise;
  70. }
  71.  
  72. private double salary;
  73. private Date hireDay;
  74. }
  75.  
  76. class Student extends Person
  77. {
  78. /**
  79. * @param n the student's name
  80. * @param m the student's major
  81. */
  82. public Student(String n, String m)
  83. {
  84. // pass n to superclass constructor
  85. super(n);
  86. major = m;
  87. }
  88.  
  89. public String getDescription()
  90. {
  91. return "a student majoring in " + major;
  92. }
  93.  
  94. private String major;
  95. }

在代码块:

  1. for (Person p : people)
  2. System.out.println(p.getName() + ", " + p.getDescription());

中p.getDescription(),将引用具体子类的子类对象的方法.

不可以省略Person类中的getDescription(),原因是编译器只允许调用在类中声明的方法.

Java抽象类简单学习的更多相关文章

  1. java clone简单学习

    最近在帮忙写单侧的时候,经常会和这几个对象类打交道,因为对java也不是很熟悉,刚好学习一下,都是很浅的学习,并没有深入的去学习哈,因为感觉也用不上. protected Object clone() ...

  2. Java注解简单学习

    注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中. 注解使我们可以 ...

  3. java泛型简单学习

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...

  4. Java抽象类的学习体会与注意事项

    一.定义 抽象类:用abstract声明的class为抽象类. 抽象方法:用abstract声明的方法为抽象方法. 抽象方法特点:只有方法定义,没有方法的实现(函数体) 抽象类的子类都必须实现它的方法 ...

  5. 用 Java 训练深度学习模型,原来可以这么简单!

    本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...

  6. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  7. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  8. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  9. 《深入理解Java虚拟机》学习笔记

    <深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...

随机推荐

  1. freemarker根据模板生成word文件实现导出功能

    一.准备工作 1.创建一个03的word文档,动态的数据用占位符标志占位(如testname).然后另存为word2003的xml文件. 2.格式化xml文件,占位符的位置用${testname}代替 ...

  2. redis的应用场景 为什么用redis

    一.不是万能的菲关系系数据库redis 在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,redis:是非关系型数据库不仅可以做缓存还能干其它事情,Mem ...

  3. 我们为什么要使用List和Set(List,Set详解)

    1.集合概述 类图 集合和数组的区别? 集合基本方法 集合特有的遍历方式? public static void main(String[] args) { //创建集合对象 Collection c ...

  4. vue 短信验证

    直接贴代码: HTML <div class="phone"> <div class="number"> <p class=&qu ...

  5. C#复习笔记(5)--C#5:简化的异步编程(异步编程的深入分析)

    首先,阐明一下标题的这个“深入分析”起得很惭愧,但是又不知道该起什么名字,这个系列也主要是做一些复习的笔记,供自己以后查阅,如果能够帮助到别人,那自然是再好不过了. 然后,我想说的是异步方法的状态机真 ...

  6. laravel添加model文件夹,需要改动的地方

    首先,将app\User(等model文件),移入APP\modellists文件夹中,方便整理 第二,修改模型中命名空间和引用其他model的路径 第三,将文件夹app\admin中的控制器文件,全 ...

  7. JDK 环境变量的设置、eclipse、Tomcat的配置

    一.JDK的环境变量的设置 环境变量设置: JDK下载好后,(1)选择电脑属性-高级系统设置-高级-环境变量,接着在系统变量中(2)新建JAVA_HOME,变量值设置为下载好后JDK在电脑中的路径;( ...

  8. hive聚合函数和表生成函数

    explode生成单独的一行

  9. Spring Boot 框架学习 (一)配置并运行Spring Boot 框架

    下载开发工具: 下载完成打开以后,第一步检查环境 查看jdk是否配置: 接着一定要注意,maven通常情况下它是没有给你配置的,要自行配置: 右键新建: 然后依赖选择web.跟Mybatis就行了. ...

  10. Django框架中的Context使用

    Django框架中的Context使用 2017年11月09日 20:01:09 aweilark 阅读数:1113   转载自:http://www.aichengxu.com/python/606 ...