Java 如何在抽象类中使用getter和setter
我有一个抽象类Java 如何在抽象类中使用getter和setter,java,oop,abstract-class,Java,Oop,Abstract Class,我有一个抽象类Customer。这是一个非常简单的类,只设置了5个string变量以及5个static int变量。最好说明我的意思: 作为免责声明,我使代码尽可能简单,我的抽象类中包含了更多与问题无关的逻辑 抽象类 我的问题如下: 我有一个类,它扩展了这个抽象类,名为客户(不同的包)。如果我在此类中设置构造函数,如下所示: 对象类 这是否将我的字符串变量设置为我通过构造函数传递的内容?当我将这个类实例化为对象时,如何从中“获取”变量? 例如:(假设String1-String5是某种类型
Customer
。这是一个非常简单的类,只设置了5个string
变量以及5个static int
变量。最好说明我的意思:
作为免责声明,我使代码尽可能简单,我的抽象类中包含了更多与问题无关的逻辑
抽象类 我的问题如下: 我有一个
类
,它扩展了这个抽象类
,名为客户
(不同的包)。如果我在此类中设置构造函数
,如下所示:
对象类
这是否将我的字符串变量设置为我通过构造函数传递的内容?当我将这个类
实例化为对象
时,如何从中“获取”变量?
例如:(假设String1-String5
是某种类型的strings
)
然后,我将如何在类中稍后调用该对象以返回(任何单个变量的)字符串。如果我的抽象类
不是抽象类
,而是我用来实例化
为对象的主类
,我会得到如下变量:字符串名称=customer.getName()代码>
TL;博士:
只是不确定如何从对象
扩展抽象类
中获取变量从子类中删除变量,这样它们就不会在父类中隐藏同名变量
//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函数将设置抽象类的变量
public abstract class Customer {
private String Name, Address, Phone, Email, Company;
public class Customer extends Main.Customer {
private String Name, Address, Phone, Email, Company;
因此,您正在设置一组变量,但正在读取另一组从未初始化过的变量。开始之前的一些注意事项:
- 在java中,按代码约定变量以小写开头。它将帮助包括您在内的人提高代码的可读性
- 没有两个同名的类,这很容易混淆。例如,您可以将其称为
ACustomer
或AbstractCustomer
,另一个称为Customer
或SomethingCustomer
- 它不是
对象类
,而是具体类
一个可以拥有其实例的类
- 由于客户继承了ACustomer,您不必再次定义
ACustomer
字段,客户已经拥有了这些字段。如果你这样做了,你就对父母隐瞒了
- 您正在构造函数内调用一个可重写的方法,请注意这一点,因为如果
setXXX
被重写,那么您可能会有一个NullPointerException
- 对于如何获取成员的问题,您可以定义
getter
然后在客户端代码中:
ACustomer customer = new Customer(...);
customer.getName();
在抽象类中仅仅是一个简单的吸气剂就不起作用了。BTW——如果你想在构建一个类时设置很多变量,你可以考虑使用Fluent接口或Builder模式。@首先,我要问的是,当抽象类的子类被实例化为对象时,如何“调用”抽象类的getter/setter。这与使用方法调用对象相同吗?我的子类中没有getter/setter。其次是我个人编写代码的方式,我可以更容易地遵循这种风格。首先声明变量,然后是构造函数,然后是getter/setter,然后是任何其他方法。我个人喜欢show comeString name=customer.getName()代码>不起作用?您指出抽象类中的get函数是公共的://下面声明公共getter和setter方法
。你的子类将自动获得这些公共方法。谢谢你我一直在寻找的。我已经公开声明了getter/setter,只是为了节省空间而没有发布它们。很高兴提供帮助。如果你认为这个答案是最好的,那么请点击复选标记接受它。
public String getName() {
return Name;
}
public class Customer extends ACustomer {
public Customer(String name, String address, String phone, String email, String company) {
super(name, address, phone, email, company);
}
}
public abstract class ACostumer{
private String name;
public String getName() {
return name;
}
}
ACustomer customer = new Customer(...);
customer.getName();