簡體   English   中英

超級 class 方法的 Inheritance 方法無法獲取子類中的詳細信息?

[英]Inheritance method of super class method can't get the details in subclass?

我有三類人 class,主要 class 和 Donar class,

人 class

public class Person{
    
private String name;
    private String  dateOfBirth;
    private String  gender;
    private String  mobileNumber;
    private String  bloodGroup;
    
    Person(){
        
    }
    
     public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(String dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getMobileNumber() {
        return mobileNumber;
    }

    public void setMobileNumber(String mobileNumber) {
        this.mobileNumber = mobileNumber;
    }

    public String getBloodGroup() {
        return bloodGroup;
    }

    public void setBloodGroup(String bloodGroup) {
        this.bloodGroup = bloodGroup;
    }
     
    public void displayPersonDetails( )
    {
        System.out.println("Name : " + name);
        System.out.println("Date of Birth : " +dateOfBirth);
        System.out.println("Gender : " +gender);
        System.out.println("Mobile Niumber : " +mobileNumber);
        System.out.println("Blood Group : "+bloodGroup);
    }

}

捐贈者class

class Donor extends Person
{
    
    
   private String bloodBankName;
    private String  donorType;
    private String  donationDate;
    
    public Donor() {
    }

    public String getBloodBankName() {
        return bloodBankName;
    }

    public void setBloodBankName(String bloodBankName) 
    {
        this.bloodBankName = bloodBankName;
    }

    public String getDonorType() {
        return donorType;
    }

    public void setDonorType(String donorType) {
        this.donorType = donorType;
    }

    public String getDonationDate() {
        return donationDate;
    }

    public void setDonationDate(String donationDate) {
        this.donationDate = donationDate;
    }
    
    public void displayDonationDetails( ) {             
        System.out.println("Donation Details :");
        super.displayPersonDetails();
        System.out.println("Blood Bank Name : "+bloodBankName);
        System.out.println("Donor Type : "+donorType);
        System.out.println("Donation Date : "+donationDate);
        
    }
    
} 

主class

package Eboxex1;

import java.util.Scanner;

public class Main { 
    public static void main(String[] args){ 
      Donor d=new Donor();
       Person p=new Person();
    Scanner sc=new Scanner(System.in);
    
    
    System.out.println("Enter the name :");
    p.setName(sc.nextLine());
            
    System.out.println("Enter Date of Birth :");
    p.setDateOfBirth(sc.nextLine());
    System.out.println("Enter Gender :");
    p.setGender(sc.nextLine());
    
    System.out.println("Enter Mobile Number :");
    p.setMobileNumber(sc.nextLine());
    
    System.out.println("Enter Blood Group :");
    p.setBloodGroup(sc.nextLine());
    
    System.out.println("Enter Blood Bank Name :");
    
 d.setBloodBankName(sc.nextLine());
    
    System.out.println("Enter Donor Type :");
    
    d.setDonorType(sc.nextLine());
    
    System.out.println("Enter Donation Date :");
    
    d.setDonationDate(sc.nextLine());
    
    d.displayDonationDetails(); 
   
    sc.close();
    } 
}

Output

輸出

我不知道錯誤是什么。

當我們運行 main 方法時,意味着它將詢問用戶的詳細信息,然后諸如Name, Date of Birth, Gender, Mobile Number, Blood Group類的詳細信息轉到Person class(getter 和 setter 方法),然后是Blood Bank Name, Donor Type, Donation Date類的詳細信息Blood Bank Name, Donor Type, Donation Date都轉到Donor class (getter and setter 方法) 然后在主displayDonationDetails中調用方法 displayDonationDetails。 在此方法中,我們必須調用 Person class 中的詳細信息。 但該方法無法將Person class 的詳細信息獲取到Donor class 方法

您正在創建兩個單獨的對象:人“p”和捐贈者“d”(由於 inheritance 本身就是一個人)。

然后在“p”object 上設置所有個人數據(姓名、出生日期、性別等),在“d”object 上設置所有捐贈者數據(捐贈者類型、捐贈日期等)。

因此,在 main-method 結束時,您的對象如下所示:

人“p”:

|---------------|---------------|
| Attribute     | Value         |
|---------------|---------------|
| name          | jano          |
| dateOfBirth   | 5/11/1998     |
| gender        | Female        |
| mobileNumber  | 456437538     |
| bloodGroup    | A+ve          |
|---------------|---------------|

捐贈者“d”(捐贈者繼承自 Person 類):

|---------------|---------------|
| Attribute     | Value         |
|---------------|---------------|
| name          | null          |
| dateOfBirth   | null          |
| gender        | null          |
| mobileNumber  | null          |
| bloodGroup    | null          |
| bloodBankName | Bload assur e |
| donorType     | ssssssssssag  |
| donationDate  | 5/787/989     |
|---------------|---------------|

然后通過調用方法“displayDonationDetails”,您只顯示捐贈者“d”的數據。 所以一切都按預期工作。

只需創建 Donor object "d" 並為其設置所有值,然后一切都會按照您的預期進行。

您的整個項目只需要捐贈者 object。 您似乎正在創建 2 object 一個人 object p 和一個捐贈者 object d 並在這兩個對象上調用 set 方法。 在您的整個程序中僅使用捐贈者 object d 並在您的捐贈者 class 中顯示人員詳細信息,在您的顯示donationDetails() 中調用 super.displayPersonDetails() 作為第一行或更好的方法,您可以在您的人員 ZABB4F2DZC42 中創建一個名為 displayDetails() 的方法並讓您的捐助者 class 覆蓋

使用繼承時,會自動獲取父 class 的屬性。 所以你只需要創建子 class object。

您的主要 class 應如下所示:-

public class Main { 
    public static void main(String[] args){ 
      Donor d=new Donor();
      Scanner sc=new Scanner(System.in);
    
    
    System.out.println("Enter the name :");
    d.setName(sc.nextLine());
            
    System.out.println("Enter Date of Birth :");
    d.setDateOfBirth(sc.nextLine());
    System.out.println("Enter Gender :");
    d.setGender(sc.nextLine());
    
    System.out.println("Enter Mobile Number :");
    d.setMobileNumber(sc.nextLine());
    
    System.out.println("Enter Blood Group :");
    d.setBloodGroup(sc.nextLine());
    
    System.out.println("Enter Blood Bank Name :");
    
 d.setBloodBankName(sc.nextLine());
    
    System.out.println("Enter Donor Type :");
    
    d.setDonorType(sc.nextLine());
    
    System.out.println("Enter Donation Date :");
    
    d.setDonationDate(sc.nextLine());
    
    d.displayDonationDetails(); 
   
    sc.close();
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM