[英]How to use getters and setters in an Abstract Class
我有一个抽象类Customer
。 这是一个非常简单的类,仅设置5个string
变量以及5个static int
变量。 更好地表明我的意思是:
作为免责声明,我使代码尽可能简单,我在抽象类中涉及了与该问题无关的更多逻辑。
public abstract class Customer {
private String Name, Address, Phone, Email, Company;
public static final int NAME = 0, ADDRESS = 1, PHONE = 2, EMAIL = 3, COMPANY = 4;
public Customer(String Name, String Address, String Phone, String Email, String Company) {
setValues(Name, Address, Phone, Email, Company);
}
private void setValues(String Name, String Address, String Phone, String Email, String Company) {
setName(Name);
setAddress(Address);
setPhone(Phone);
setEmail(Email);
setCompany(Company);
}
//declare public getters and setters methods below
}
我的问题如下:
我有一个class
是extends
这个abstract class
叫做Customer
(不同的包)。 如果我设置的constructor
在这个class
这样:
public class Customer extends Main.Customer {
private String Name, Address, Phone, Email, Company;
public Customer(String Name, String Address, String Phone, String Email, String Company) {
super(Name, Address, Phone, Email, Company);
}
}
这是否将我的String
变量设置为我通过构造函数传递的变量? 就像当我将该class
instantiate
化为object
,如何从中“获取”变量?
例如:(假设String1 -String5
是某种strings
)
public class Random {
private Customer customer = new Customer(String1, String2, String3, String4, String5);
}
之后,我将如何在类中调用该对象以返回(任何单个变量的) string
。 正如如果我的abstract class
是不是abstract
,但主要的class
我使用,以instantiate
为object
,我得到的变量,像这样: String name = customer.getName();
只是不确定如何从extending
abstract class
的object
获取variables
。
开始之前的一些注意事项:
没有两个具有相同名称的类,这非常令人困惑。 您可以调用它,例如ACustomer
或AbstractCustomer
以及另一个Customer
或SomethingCustomer
不是Object class
而是Concrete Class
类,您可以拥有它的实例的类。
当客户继承ACustomer时,您不必再次定义ACustomer
字段,客户已经拥有它们。 如果这样做,您将对父母隐藏这些内容。
public class Customer extends ACustomer {
public Customer(String name, String address, String phone, String email, String company) {
super(name, address, phone, email, company);
}
}
setXXX
被重写,则可能会有NullPointerException
。 getters
。 public abstract class ACostumer{
private String name;
public String getName() {
return name;
}
}
然后在客户端代码中:
ACustomer customer = new Customer(...);
customer.getName();
从子类中删除变量,以使它们不会在父类中隐藏具有相同名称的变量。
//sub class
public class Customer extends Main.Customer {
//DROP THESE private String Name, Address, Phone, Email, Company;
public Customer(String Name, String Address, String Phone, String Email, String Company) {
super(Name, Address, Phone, Email, Company);
}
}
并将getter添加到您的父类中:
//parent class
public abstract class Customer {
private String Name, Address, Phone, Email, Company;
public static final int NAME = 0, ADDRESS = 1, PHONE = 2, EMAIL = 3, COMPANY = 4;
public Customer(String Name, String Address, String Phone, String Email, String Company) {
setValues(Name, Address, Phone, Email, Company);
}
private void setValues(String Name, String Address, String Phone, String Email, String Company) {
setName(Name);
setAddress(Address);
setPhone(Phone);
setEmail(Email);
setCompany(Company);
}
public String getName() {
return Name;
}
public String getAddress() {
return Address;
}
//etc....
}
另外,我真的建议为您的父类和子类使用不同的名称,以避免混淆。
您的子类使抽象类的私有属性黯然失色。
public abstract class Customer {
private String Name, Address, Phone, Email, Company;
public class Customer extends Main.Customer {
private String Name, Address, Phone, Email, Company;
因此,您的表单抽象类中的任何get方法
public String getName() {
return Name;
}
将在子类中返回从未初始化的变量名称。 而当您调用super(...)
,其中的set函数将设置抽象类的变量。
因此,您要设置一组变量,但要读取另一组从未初始化的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.