簡(jiǎn)單學(xué)習(xí)Java抽象類(lèi)要點(diǎn)及實(shí)例
使用抽象類(lèi)應(yīng)該注意的幾個(gè)要點(diǎn):
包含一個(gè)或者多個(gè)抽象方法的類(lèi)必須被聲明為抽象類(lèi).
將類(lèi)聲明為抽象類(lèi),不一定含有抽象方法.
通常認(rèn)為,在抽象類(lèi)中不應(yīng)該包括具體方法,建議盡量將通用的域和方法放在超類(lèi)中.
抽象類(lèi)不可以被實(shí)例化.即不能創(chuàng)建這個(gè)類(lèi)的對(duì)象
實(shí)例代碼:
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(),將引用具體子類(lèi)的子類(lèi)對(duì)象的方法.
不可以省略Person類(lèi)中的getDescription(),原因是編譯器只允許調(diào)用在類(lèi)中聲明的方法.
- JAVA抽象類(lèi)和抽象方法(abstract)實(shí)例分析
- Java的抽象方法和抽象類(lèi)實(shí)例詳解
- java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口實(shí)例詳解
- Java接口和抽象類(lèi)用法實(shí)例總結(jié)
- Java中接口和抽象類(lèi)的區(qū)別與相同之處
- Java中的接口和抽象類(lèi)用法實(shí)例詳解
- JAVA 繼承基本類(lèi)、抽象類(lèi)、接口介紹
- Java 抽象類(lèi)定義與方法實(shí)例詳解
- java 抽象類(lèi)與接口的區(qū)別總結(jié)
- 淺談Java抽象類(lèi)和接口的個(gè)人理解
- Java抽象類(lèi)和抽象方法定義與用法實(shí)例詳解
相關(guān)文章
java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的
這篇文章主要介紹了java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11解決springboot項(xiàng)目找不到resources目錄下的資源問(wèn)題
這篇文章主要介紹了解決springboot項(xiàng)目找不到resources目錄下的資源問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java實(shí)現(xiàn)整數(shù)的逆序輸出的三種方法
這篇文章主要介紹了Java實(shí)現(xiàn)整數(shù)的逆序輸出的三種方法,第一種是無(wú)限制整數(shù)的逆序輸出,第二種是非負(fù)整數(shù)的逆序輸出,第三種是非特殊情況的逆序輸出,每種方法給大家講解的非常詳細(xì)需要的朋友可以參考下2022-11-11Spring中Bean對(duì)象的定義、注冊(cè)和獲取流程分析
這篇文章主要介紹了Spring中Bean對(duì)象的定義、注冊(cè)和獲取流程分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06如何開(kāi)啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問(wèn)題
這篇文章主要介紹了如何開(kāi)啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09springboot 使用zookeeper實(shí)現(xiàn)分布式隊(duì)列的基本步驟
這篇文章主要介紹了springboot 使用zookeeper實(shí)現(xiàn)分布式隊(duì)列,通過(guò)ZooKeeper的協(xié)調(diào)和同步機(jī)制,多個(gè)應(yīng)用程序可以共享一個(gè)隊(duì)列,并按照先進(jìn)先出的順序處理隊(duì)列中的消息,需要的朋友可以參考下2023-08-08maven升級(jí)版本后報(bào)錯(cuò):Blocked mirror for repositories
本文主要介紹了maven升級(jí)版本后報(bào)錯(cuò):Blocked mirror for repositories,文中的解決方法非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09Java8新特性之重復(fù)注解(repeating annotations)淺析
這篇文章主要介紹了Java8新特性之重復(fù)注解(repeating annotations)淺析,這個(gè)新特性只是修改了程序的可讀性,是比較小的一個(gè)改動(dòng),需要的朋友可以參考下2014-06-06