У меня есть абстрактный класс и 2 подкласса.Как вы работаете с ними, если вы не можете создать экземпляр абстрактного класса - PullRequest
1 голос
/ 10 марта 2012

У меня есть абстрактный класс и 2 подкласса. Как вы работаете с ними, если вы не можете создать экземпляр абстрактного класса. Я написал код, который первоначально использовал класс и подкласс, а потом понял, что лучше будет иметь 2 подкласса из родительского класса. Я понимаю, что это способ сделать множественное наследование в Java. Мой существующий код был экземпляром родительского класса, и я был работая с этим. Теперь я не могу создать экземпляр родительского класса, так как этот класс теперь абстрактный. Это только те подклассы, которые я могу теперь создать? Это нормальные классы.

Один подкласс является сотрудником и имеет дату рождения, зарплату, а другой подкласс - клиентом и имеет предпочтительный продукт питания, детали оплаты

Родительский класс - это человек

Любая помощь будет высоко ценится.

Ответы [ 4 ]

3 голосов
/ 10 марта 2012

Вам не нужно создавать экземпляр родительского класса. Вы должны использовать его, например, по следующей причине:

Вы можете оставить там некоторый общий полезный метод, который вы можете использовать (и ссылаться на него переменной родительского класса) в своих подклассах (также вы можете переопределить его, если вам нужно), например:

    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 голосов
/ 10 марта 2012

Вы можете сделать это:

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» из клиентского кода.

2 голосов
/ 10 марта 2012

Да, это именно то, что это значит.Абстрактные классы не могут быть созданы, только классы, которые полностью их реализуют.

И если ваша логика звучит, вам даже не нужно это делать.Я имею в виду, вы когда-нибудь хотите создать Person, или это всегда Employee или Customer?

Кроме того, если класс расширяется несколькими другими, это не называется множественным наследованием,Множественное наследование - это когда один класс расширяет несколько других.

В Java вы можете расширить только один класс, но вы можете реализовать несколько интерфейсов.(но это выходит за рамки вопроса, я думаю)

1 голос
/ 10 марта 2012

Извините за следующий ответ, но я хочу получить ответ на ваш комментарий о проверке: Вы можете сделать это так:

    class Person{
         .....
       boolean validate(){return !name.isEmpty() && !surname.isEmpty();}
    }

    class Employee{
       ....
       boolean validate(){return super.validate() && salary>0;}
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...