有 Java 编程相关的问题?

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

java我有一个抽象类和两个子类。如果不能实例化抽象类,如何使用它们

我有一个抽象类和两个子类。如果不能实例化抽象类,如何使用它们。我编写的代码最初使用一个类和子类,后来意识到最好从父类中获得两个子类。我知道这是在Java中进行多重继承的一种方法。我的现有代码正在实例化父类,而我 处理这个问题。现在,我无法实例化父类,因为该类现在是抽象的。 它是我现在唯一可以实例化的子类吗?这些是普通班

一个子类是employee,有出生日期、薪水,另一个子类是customer,有FavoriteFood、paymentdetails

父类是person

任何帮助都将不胜感激


共 (4) 个答案

  1. # 1 楼答案

    您不需要实例化父类。您必须使用它,例如,下一个原因:

    您可以在子类中保留一些通用的有用方法(并通过父类的变量链接到它),例如:

        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:抽象类不适用于多重继承,多重继承意味着另一件事(类可以从多个父级继承)

  2. # 2 楼答案

    是的,这就是它的意思。抽象类不能实例化,只有完全实现它们的类才能实例化

    如果你的逻辑正确,你甚至不需要这样做。我的意思是,你想只创建一个Person,还是总是EmployeeCustomer

    此外,如果一个类由多个其他类扩展,则不称为多重继承。多重继承是指单个类扩展多个其他类

    在Java中,只能扩展一个类,但可以实现多个接口。(但我想这超出了问题的范围)

  3. # 3 楼答案

    您可以这样做:

    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引用指向一个有效的具体子类

    现在您已经了解了一些关于继承的知识,您需要了解工厂类和虚拟构造函数。这允许您创建不同类型人员的新实例,这样您就可以在客户端代码中保留“如果”的签出

  4. # 4 楼答案

    很抱歉下一个答案,但我想回答您关于验证的评论: 您可以这样做:

        class Person{
             .....
           boolean validate(){return !name.isEmpty() && !surname.isEmpty();}
        }
    
        class Employee{
           ....
           boolean validate(){return super.validate() && salary>0;}
        }