我有一个抽象类和2个子类。如果你不能实例化抽象类,你如何使用它们。我编写了最初使用类和子类的代码,后来意识到我最好从父类中获得2个子类。我理解这是一种在Java中进行多重继承的方法。我现有的代码是实例化父类,我是 与此合作。现在,我无法实例化父类,因为类现在是抽象的。 它只是我现在可以实例化的子类吗?这些是正常的课程。
一个子类是员工,有出生日期,工资,另一个子类是客户,并有favouritefood,paymentdetails
父类是人
非常感谢任何帮助。
答案 0 :(得分:3)
您不需要实例化父类。例如,您必须使用它,原因如下:
您可以保留一些通用的有用方法,您可以在子类中使用(并通过父类的变量链接到它)(如果需要,也可以覆盖它),例如:
abstract class Person{
protected String name;
protected String surname;
public String getFullName(){return name+" "+surname;}
}
public class Employee extends Person{
public Employee(String name, String surname){
this.name=name; this.surname=surname;
}
}
public class Mister extends Person{
public Employee(String name, String surname){
this.name=name; this.surname=surname;
}
public String getFullName(){return "Mr. "+name+" "+surname;}
}
然后你可以这样做:
Person p1=new Employee("Jonh","Doe");
Person p2=new Mister("Jonh","Doe");
p1.getFullName(); //John Doe
p2.getFullName(); //Mr. John Doe
PS:抽象类不用于多重继承,多重继承意味着另一件事(类可以从多个父级继承)
答案 1 :(得分:2)
是的,这正是它的含义。抽象类无法实例化,只有完全实现它们的类才可以。
如果你的逻辑听起来,你甚至不需要。我的意思是,您是否只想创建一个Person
,或者它始终是Employee
还是Customer
?
此外,如果一个类被多个其他类扩展,则不称为多重继承。多重继承是指单个类扩展多个其他类。
在Java中,您只能扩展一个类,但您可以实现多个接口。 (但这超出了我猜的范围)
答案 2 :(得分:2)
你可以这样做:
public abstract class Person {
// details left out
}
public class Employee extends Person {
// details left out
}
public class Customer extends Person {
// details left out
}
现在你可以这样做:
Person e = new Employee();
Person c = new Customer();
List<Person> = new ArrayList<Person>();
您只需将每个Person
引用指向一个有效的具体子类。
现在您已了解有关继承的知识,您将需要了解Factory类和虚拟构造函数。这允许您以这样的方式创建不同类型的Person的新实例,以便“if”检查客户端代码。
答案 3 :(得分:1)
很抱歉接下来的回答,但我想回答您对验证的评论: 你可以这样做:
class Person{
.....
boolean validate(){return !name.isEmpty() && !surname.isEmpty();}
}
class Employee{
....
boolean validate(){return super.validate() && salary>0;}
}