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

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

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

在面向?qū)ο蟮母拍钪?,所有的?duì)象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對(duì)象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類。

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

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

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

抽象類

在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個(gè)成員變量,7個(gè)成員方法和1個(gè)構(gòu)造方法。 現(xiàn)在如果你嘗試如下的例子:

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

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

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í)例化一個(gè)Employee類的對(duì)象,但是如果我們實(shí)例化一個(gè)Salary類對(duì)象,該對(duì)象將從Employee類繼承3個(gè)成員變量和7個(gè)成員方法。

/* 文件名 : 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è)計(jì)這樣一個(gè)類,該類包含一個(gè)特別的成員方法,該方法的具體實(shí)現(xiàn)由它的子類確定,那么你可以在父類中聲明該方法為抽象方法。

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

抽象方法沒有定義,方法名后面直接跟一個(gè)分號(hào),而不是花括號(hào)。

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

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

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

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

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

如果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ì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java集合類之Map集合的特點(diǎn)及使用詳解

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

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

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

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

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

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

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

    DJL是一個(gè)使用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)用的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • jdk21安裝后無jre文件該如何解決

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

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

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

    這篇文章主要介紹了java設(shè)計(jì)模式(實(shí)戰(zhàn))-責(zé)任鏈模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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安裝和配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論

永德县| 军事| 玛纳斯县| 新建县| 佳木斯市| 贺州市| 萍乡市| 晋宁县| 鹤山市| 龙游县| 京山县| 碌曲县| 潢川县| 罗甸县| 金湖县| 无为县| 东山县| 高台县| 霍林郭勒市| 齐河县| 伽师县| 东平县| 巢湖市| 阿巴嘎旗| 方城县| 晴隆县| 赤城县| 河东区| 宁武县| 墨玉县| 赞皇县| 江油市| 武冈市| 黔江区| 栾川县| 西乌珠穆沁旗| 龙游县| 白河县| 遂宁市| 盘锦市| 青神县|