问题描述
class A {
String name;
int age;
setName(String name);
getName();
setAge(int age);
getAge()
}
我有多个扩展A的类,并与getter和setter一起添加更多字段。 现在有另一个类,例如B,它需要名称和年龄,这已经由A类提供。 因此,我应该继续创建没有任何字段的B类,而只是扩展A类,还是直接使用A类?
class B extends A {}
P.S-我正在使用泛型,当我直接使用超类A时会发出警告,但功能正常。请提出建议。
解决方法
大多数情况下,如果您只是创建一个没有自己状态的Class,那么设计将是不正确的,但是如果这样,
A
是abstract
类,即您要限制用户创建A的实例,从而将其标记为抽象,然后通过创建B来创建A的实现。
下面是相同的示例
abstract class A{
protected String name;
protected int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class B extends A{}
如果您只想将父类字段用于ur函数,还可以使代码在运行时更加动态化
abstract class A{ // you can altogether remove 'abstract' and not create a B class
protected String name;
protected int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class B extends A{}
class C extends A{
protected String location;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
现在请参阅以下方法
public static <T extends A> void printName(List<T> list) {
for (T t : list) {
System.out.println(t.getName());
}
}
这符合List<B>,List<C>
我可以想到的确没有任何理由需要扩展类而不进行任何更改。也许您觉得将来会需要它。这违反了YAGNI主体。
只需使用A类即可。您可以在需要时进行更改。
这真的没有意义。如果它给您警告,则可能有充分的理由。除非您有一个合适的用例,并且知道自己在做什么,否则空类除了将无用的文件添加到项目中之外没有任何作用