最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 抽象類定義與方法實(shí)例詳解

 更新時間:2017年04月14日 16:15:52   投稿:wbb  
這篇文章主要介紹了java 抽象類與接口的區(qū)別介紹的相關(guān)資料,需要的朋友可以參考下...

在面向?qū)ο蟮母拍钪校械膶ο蠖际峭ㄟ^類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

抽象類除了不能實(shí)例化對象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的訪問方式和普通類一樣。

由于抽象類不能實(shí)例化對象,所以抽象類必須被繼承,才能被使用。也是因?yàn)檫@個原因,通常在設(shè)計階段決定要不要設(shè)計抽象類。

父類包含了子類集合的常見的方法,但是由于父類本身是抽象的,所以不能使用這些方法。

抽象類

在Java語言中使用abstract class來定義抽象類。如下實(shí)例:

/* 文件名 : Employee.java */
public abstract class Employee
{
  private String name;
  private String address;
  private int number;
  public Employee(String name, String address, int number)
  {
   System.out.println("Constructing an Employee");
   this.name = name;
   this.address = address;
   this.number = number;
  }
  public double computePay()
  {
   System.out.println("Inside Employee computePay");
   return 0.0;
  }
  public void mailCheck()
  {
   System.out.println("Mailing a check to " + this.name
    + " " + this.address);
  }
  public String toString()
  {
   return name + " " + address + " " + number;
  }
  public String getName()
  {
   return name;
  }
  public String getAddress()
  {
   return address;
  }
  public void setAddress(String newAddress)
  {
   address = newAddress;
  }
  public int getNumber()
  {
   return number;
  }
}

注意到該Employee類沒有什么不同,盡管該類是抽象類,但是它仍然有3個成員變量,7個成員方法和1個構(gòu)造方法。 現(xiàn)在如果你嘗試如下的例子:

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
  public static void main(String [] args)
  {
   /* 以下是不允許的,會引發(fā)錯誤 */
   Employee e = new Employee("George W.", "Houston, TX", 43);
   System.out.println("\n Call mailCheck using Employee reference--");
   e.mailCheck();
  }
}

當(dāng)你嘗試編譯AbstractDemo類時,會產(chǎn)生如下錯誤:

Employee.java:46: Employee is abstract; cannot be instantiated
   Employee e = new Employee("George W.", "Houston, TX", 43);          ^
1 error

繼承抽象類

我們能通過一般的方法繼承Employee類:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
  private double salary; //Annual salary
  public Salary(String name, String address, int number, double
   salary)
  {
    super(name, address, number);
    setSalary(salary);
  }
  public void mailCheck()
  {
    System.out.println("Within mailCheck of Salary class ");
    System.out.println("Mailing check to " + getName()
    + " with salary " + salary);
  }
  public double getSalary()
  {
    return salary;
  }
  public void setSalary(double newSalary)
  {
    if(newSalary >= 0.0)
    {
     salary = newSalary;
    }
  }
  public double computePay()
  {
   System.out.println("Computing salary pay for " + getName());
   return salary/52;
  }
}

盡管我們不能實(shí)例化一個Employee類的對象,但是如果我們實(shí)例化一個Salary類對象,該對象將從Employee類繼承3個成員變量和7個成員方法。

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
  public static void main(String [] args)
  {
   Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
   Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
   System.out.println("Call mailCheck using Salary reference --");
   s.mailCheck();
   System.out.println("\n Call mailCheck using Employee reference--");
   e.mailCheck();
  }
}

以上程序編譯運(yùn)行結(jié)果如下:

Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0
Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.

抽象方法

如果你想設(shè)計這樣一個類,該類包含一個特別的成員方法,該方法的具體實(shí)現(xiàn)由它的子類確定,那么你可以在父類中聲明該方法為抽象方法。

Abstract關(guān)鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。

抽象方法沒有定義,方法名后面直接跟一個分號,而不是花括號。

public abstract class Employee
{
  private String name;
  private String address;
  private int number;
   public abstract double computePay();  
  //其余代碼
}

聲明抽象方法會造成以下兩個結(jié)果:

如果一個類包含抽象方法,那么該類必須是抽象類。

任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類。

繼承抽象方法的子類必須重載該方法。否則,該子類也必須聲明為抽象類。最終,必須有子類實(shí)現(xiàn)該抽象方法,否則,從最初的父類到最終的子類都不能用來實(shí)例化對象。

如果Salary類繼承了Employee類,那么它必須實(shí)現(xiàn)computePay()方法:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
  private double salary; // Annual salary 
  public double computePay()
  {
   System.out.println("Computing salary pay for " + getName());
   return salary/52;
  }
  //其余代碼
}

希望本文可以幫助需要的朋友

相關(guān)文章

  • java使用UDP實(shí)現(xiàn)多人聊天功能

    java使用UDP實(shí)現(xiàn)多人聊天功能

    這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)多人聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java集合類之Map集合的特點(diǎn)及使用詳解

    Java集合類之Map集合的特點(diǎn)及使用詳解

    這篇文章主要為大家詳細(xì)介紹一下Java集合類中Map的特點(diǎn)及使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-08-08
  • Transactional注解導(dǎo)致Spring Bean定時任務(wù)失效的解決方法

    Transactional注解導(dǎo)致Spring Bean定時任務(wù)失效的解決方法

    這篇文章主要介紹了Transactional注解導(dǎo)致Spring Bean定時任務(wù)失效的解決方法,文中通過代碼示例介紹的非常詳細(xì),對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-10-10
  • JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式

    JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式

    這篇文章主要介紹了JSR303校驗(yàn)前端傳遞的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot集成DJL實(shí)現(xiàn)圖片分類功能

    SpringBoot集成DJL實(shí)現(xiàn)圖片分類功能

    DJL是一個使用Java?API簡化模型訓(xùn)練、測試、部署和使用深度學(xué)習(xí)模型進(jìn)行推理的開源庫深度學(xué)習(xí)工具包,開源的許可協(xié)議是Apache-2.0,本文給大家介紹了SpringBoot集成DJL實(shí)現(xiàn)圖片分類功能,需要的朋友可以參考下
    2024-10-10
  • 使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例

    使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例

    這篇文章主要介紹了使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • jdk21安裝后無jre文件該如何解決

    jdk21安裝后無jre文件該如何解決

    java開發(fā)少不了安裝jdk,下面這篇文章主要給大家介紹了關(guān)于jdk21安裝后無jre文件該如何解決的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • java設(shè)計模式(實(shí)戰(zhàn))-責(zé)任鏈模式

    java設(shè)計模式(實(shí)戰(zhàn))-責(zé)任鏈模式

    這篇文章主要介紹了java設(shè)計模式(實(shí)戰(zhàn))-責(zé)任鏈模式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • MVC框架自定義實(shí)現(xiàn)過程

    MVC框架自定義實(shí)現(xiàn)過程

    這篇文章主要介紹了MVC框架自定義實(shí)現(xiàn)過程,通過搞懂什么是MVC以及MVC的運(yùn)行原理然后再去理解其演繹過程,本文附含了詳細(xì)的思維導(dǎo)圖幫助大家更好的理解MVC
    2021-08-08
  • Tomcat+JDK安裝和配置教程

    Tomcat+JDK安裝和配置教程

    這篇文章主要為大家詳細(xì)介紹了Tomcat+JDK安裝和配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

博爱县| 新干县| 鄄城县| 广元市| 扬州市| 嘉兴市| 无为县| 柏乡县| 浦城县| 宕昌县| 新野县| 南康市| 华阴市| 临洮县| 依兰县| 潞西市| 新闻| 桃园县| 杭锦后旗| 安西县| 无棣县| 苗栗县| 离岛区| 宜兴市| 柘城县| 荣昌县| 织金县| 香格里拉县| 永新县| 潼南县| 上高县| 明溪县| 出国| 萨嘎县| 广西| 泾川县| 宁陵县| 海兴县| 喀什市| 和平区| 蒲江县|