有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java子类在构造函数中少取1个参数

我正在编写一个简单的程序,用JavaFX显示个人卡号、姓名和限制。如何使子类在其构造函数中少继承一个参数?我有两种不同的卡类型,一种是没有限制的借记卡,另一种是我在创建对象时会给出限制的信用卡

public AccountData(String id, String name, int limit) {
    this.id = id;
    this.name = name;
    this.limit = limit;
}

因此,在创建扩展AccountData的借记卡子类时,我不需要limit参数,因为它没有limit参数

先谢谢你


共 (5) 个答案

  1. # 1 楼答案

    只需在超级类中为借记卡添加另一个构造函数,该构造函数接受的参数更少

  2. # 2 楼答案

    干净的方法是将limitAccountData类中删除(因为它显然不是一个公共属性),只在信用卡类中引入它:

    public class AccountData {
        private String id;
        private String name;
    
        public AccountData(String id, String name) {
            this.id = id;
            this.name = name;
        }
    }
    
    public class CreditCardAccountData extends AccountData {
        private int limit;
    
        public CreditCardAccountData(String id, String name, int limit) {
            super(id, name);
            this.limit = limit;
        }
    }
    

    如果您想坚持当前的方法,可以向AccountData类添加第二个构造函数,例如,将limit设置为默认值(可能是Integer.MAX_VALUE-1,尽管前者似乎更合适):

    public AccountData(String id, String name) {
        this(id, name, Integer.MAX_VALUE);
    }
    
  3. # 3 楼答案

    只需编写一个参数更少的新构造函数,如下所示:

    class DebitCard extends AccountData {
    
     public DebitCard(String id, String name) {
        super(id, name, Integer.MAX_VALUE);
     }
    
    }
    
  4. # 4 楼答案

    I have 2 different card types, a debit card, that has no limit, and a credit card that I will give a limit when creating the object.

    那么CreditCardDebitCard大概是AccountData类型的子类;因此,让limit成为CreditCard子类的属性,而不是AccountData

    class AccountData {
      AccountData(String id, String name) { ... }
    }
    
    class CreditCard extends AccountData {
      CreditCard(String id, String name, int limit) {
        super(id, name);
        this.limit = limit;
      }
    }
    
    class DebitCard extends AccountData {
      DebitCard(String id, String name) {
        super(id, name);
      }
    }
    
  5. # 5 楼答案

    从概念上讲,我建议重新设计,因为一个子类具有不同的继承成员集,而另一个子类具有不同的继承成员集,这不是一个好主意,两者都继承相同的父类。但是,对于特殊情况,我可以建议在AccountDataCredit Card类中设置私人整数限制。这样,你就可以保护你的会员。 如果你有一个参数较少的构造函数,就会产生问题。因为,若limit是公共的,则可以从DebitCard类访问它,因为它将继承。 所以,最好对AccountData和CreditCard类都设置私有int限制