zoukankan      html  css  js  c++  java
  • Java抽象类简单学习

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

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

    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(),原因是编译器只允许调用在类中声明的方法. 

  • 相关阅读:
    高级性能测试工程师进阶系列课程
    LoadRunner补丁Patch4下载
    【广州】LoadRunner性能测试实战训练
    LoadRunner测试国产神通数据库的方法
    深圳 LoadRunner性能测试技术培训
    高级软件测试工程师系列课程
    《.NET性能测试诊断与优化》教程
    《ASP.NET Site Performance Secrets》读书笔记
    AppDynamics监控JBOSS
    为企业免费提供性能测试指导(每月仅一个名额)
  • 原文地址:https://www.cnblogs.com/aikongmeng/p/3697325.html
Copyright © 2011-2022 走看看