简单学习Java抽象类要点及实例
使用抽象类应该注意的几个要点:
包含一个或者多个抽象方法的类必须被声明为抽象类.
将类声明为抽象类,不一定含有抽象方法.
通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.
抽象类不可以被实例化.即不能创建这个类的对象
实例代码:
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(),原因是编译器只允许调用在类中声明的方法.
相关文章
解决springboot项目找不到resources目录下的资源问题
这篇文章主要介绍了解决springboot项目找不到resources目录下的资源问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08springboot 使用zookeeper实现分布式队列的基本步骤
这篇文章主要介绍了springboot 使用zookeeper实现分布式队列,通过ZooKeeper的协调和同步机制,多个应用程序可以共享一个队列,并按照先进先出的顺序处理队列中的消息,需要的朋友可以参考下2023-08-08maven升级版本后报错:Blocked mirror for repositories
本文主要介绍了maven升级版本后报错:Blocked mirror for repositories,文中的解决方法非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-09-09Java8新特性之重复注解(repeating annotations)浅析
这篇文章主要介绍了Java8新特性之重复注解(repeating annotations)浅析,这个新特性只是修改了程序的可读性,是比较小的一个改动,需要的朋友可以参考下2014-06-06
最新评论