简单学习Java抽象类要点及实例

时间:2021-10-11 09:08:12 

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

包含一个或者多个抽象方法的类必须被声明为抽象类.
将类声明为抽象类,不一定含有抽象方法.
通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.
抽象类不可以被实例化.即不能创建这个类的对象
实例代码:


import java.util.*;

/**
 * This program demonstrates abstract classes.
 * @version 1.01 2004-02-21
 * @author Cay Horstmann
 */
public class PersonTest
{
   public static void main(String[] args)
   {
      Person[] people = new Person[2];

      // fill the people array with Student and Employee objects
      people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
      people[1] = new Student("Maria Morris", "computer science");

      // print out names and descriptions of all Person objects
      for (Person p : people)
         System.out.println(p.getName() + ", " + p.getDescription());
   }
}

abstract class Person
{
   public Person(String n)
   {
      name = n;
   }

   public abstract String getDescription();

   public String getName()
   {
      return name;
   }

   private String name;
}

class Employee extends Person
{
   public Employee(String n, double s, int year, int month, int day)
   {
      super(n);
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      hireDay = calendar.getTime();
   }

   public double getSalary()
   {
      return salary;
   }

   public Date getHireDay()
   {
      return hireDay;
   }

   public String getDescription()
   {
      return String.format("an employee with a salary of $%.2f", salary);
   }

   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }

   private double salary;
   private Date hireDay;
}

class Student extends Person
{
   /**
    * @param n the student's name
    * @param m the student's major
    */
   public Student(String n, String m)
   {
      // pass n to superclass constructor
      super(n);
      major = m;
   }

   public String getDescription()
   {
      return "a student majoring in " + major;
   }

   private String major;
}


在代码块:


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

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

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

标签:Java,抽象类
0
投稿

猜你喜欢

  • springboot如何统一设置时区

    2022-01-26 18:16:39
  • C#委托delegate实例解析

    2021-07-28 08:58:26
  • C#控制图像旋转和翻转的方法

    2023-11-26 08:25:08
  • springboot实现多模块项目添加一新模块

    2021-09-22 16:43:09
  • java编程实现优先队列的二叉堆代码分享

    2022-11-13 15:32:13
  • Spring Security基于JWT实现SSO单点登录详解

    2022-02-28 10:56:55
  • 解决使用mybatis-plus时,生成的SQL大写变小写加下划线问题

    2022-10-20 09:24:47
  • 解析Android 8.1平台SystemUI 导航栏加载流程

    2023-06-23 15:21:21
  • Java使用Preference类保存上一次记录的方法

    2023-05-08 01:49:14
  • JAVA 获取系统当前时间实例代码

    2022-09-01 05:53:01
  • Java多线程同步工具类CyclicBarrier的使用

    2021-08-26 05:29:53
  • spring-boot-maven-plugin:打包时排除provided依赖问题

    2023-07-18 02:12:11
  • C#中Write()和WriteLine()的区别分析

    2023-11-04 21:04:23
  • c#使用Socket发送HTTP/HTTPS请求的实现代码

    2023-10-12 07:10:00
  • C#中的多播委托和泛型委托

    2022-03-23 19:17:28
  • Android Flutter中Offstage组件的使用教程详解

    2023-08-20 01:01:44
  • java8新特性-lambda表达式入门学习心得

    2021-09-26 17:14:33
  • 解决Spring国际化文案占位符失效问题的方法

    2022-10-20 23:42:23
  • C# FileStream简单介绍和使用

    2023-07-05 23:04:05
  • C# 文字代码页 文字编码的代码页名称速查表

    2023-12-13 04:03:54
  • asp之家 软件编程 m.aspxhome.com