【问题标题】:Inheritance method of super class method can't get the details in subclass?超类方法的继承方法无法获取子类的详细信息?
【发布时间】:2021-04-12 21:41:23
【问题描述】:

我有三个类 Person 类,Main 类和 Donar 类,

人物类

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 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);
        
    }
    
} 

主类

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();
    } 
}

输出

我不知道错误是什么。

当我们运行 main 方法时,意味着它将向用户询问详细信息,然后像 Name, Date of Birth, Gender, Mobile Number, Blood Group 这样的详细信息会转到 Person 类(getter 和 setter 方法),然后像 Blood Bank Name, Donor Type, Donation Date 这样的详细信息会转到 @ 987654329@类(getter和setter方法) 然后在主类中调用方法displayDonationDetails。在这个方法中,我们必须调用 Person 类中的细节。但是该方法无法将Person类的详细信息获取到Donor类方法

【问题讨论】:

    标签: java inheritance methods super superclass


    【解决方案1】:

    您正在创建两个单独的对象:Person "p" 和 Donor "d"(由于继承是 Person 本身)。

    然后您在“p”对象上设置所有个人数据(姓名、出生日期、性别等),在“d”对象上设置所有捐赠者数据(捐赠者类型、捐赠日期等)。

    所以在主方法结束时,您的对象如下所示:

    人“p”:

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

    Donor "d"(Donor 继承自 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 对象“d”并为其设置所有值,然后一切都会按您的预期工作。

    【讨论】:

    • 不,问题是你必须创建三个单独的类在子类方法中调用超类变量我不知道如何将这些值从超类调用到子类无论如何谢谢你的有效回答
    • 超类不能访问其子类的属性或方法,因为它不知道自己被继承了。因此“Person”无法访问“Donor”的详细信息。相反,子类只能访问其超类的属性和方法,超类希望它看到。所以“捐赠者”可以访问“个人”的详细信息,但前提是他们具有正确的访问修饰符。在您的情况下,“捐赠者”只能访问方法,因为它们是“公共的”,但不能访问属性,因为它们是“私有的”。要么使属性“受保护”,要么使用 Getters 方法。
    【解决方案2】:

    当你使用继承时,你会自动获取父类的属性。 所以你只需要创建子类对象。

    你的主类应该是这样的:-

    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();
        } 
    }
    

    【讨论】:

      【解决方案3】:

      您的整个程序只需要 Donor 对象。您似乎正在创建 2 个对象,一个人对象 p 和一个施主对象 d,并在这两个对象上调用 set 方法。仅在整个程序中使用捐助者对象 d 并在捐助者类中显示人员详细信息,调用 super.displayPersonDetails() 在您的显示donationDetails() 中作为第一行或更好的是,您可以在人员类中创建一个名为 displayDetails() 的方法并让您的捐助者类覆盖它

      【讨论】:

        猜你喜欢
        • 2020-08-27
        • 2013-10-23
        • 1970-01-01
        • 2021-05-04
        • 2019-11-27
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        相关资源
        最近更新 更多