В чем разница между этими видами инстанцирования? - PullRequest
0 голосов
/ 08 ноября 2019

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

Мой вопрос:

public abstract class Person {
    code goes here ....
}

public class Employee extends Person {
    code goes here ....
}

В чем разница между этими типами создания экземпляров?

Person student = new Employee("Dove","Female",0);

и

Employee student = new Employee("Dove","Female",0);

Ответы [ 3 ]

2 голосов
/ 08 ноября 2019

Ниже приведены различия в обоих экземплярах.

(1) Person student = new Employee("Dove","Female",0);

В этом экземпляре student является объектом класса Person, поэтому он не может получить доступ к Employeeспецифичный для класса methods или attributes.

(2) Employee student = new Employee("Dove","Female",0);

Здесь во втором экземпляре student может получить доступ к Employee специфическому для класса methods и attributesа также класс Person, поскольку он распространяется на класс Employee.

Это принципиальное различие в этих двух утверждениях.

1 голос
/ 08 ноября 2019

Это в основном то же самое, но разница в том, что:

1- В первом объявлении:

Person student = new Employee("Dove","Female",0);

Здесь student не может получить доступ Employee для определенного классаmethods или attributes, поскольку это Person объект, который содержит Employee экземпляр.

2- Но во втором:

Employee student = new Employee("Dove","Female",0);

Здесь student можетиспользуйте атрибуты и методы Employee и Person.

Пожалуйста, проверьте Полиморфизм Oracle Docs для дальнейшего чтения о полиморфизме в Java.

Пример:

Мы можем видеть это в этом примере, где мы используем Integer и Object классы:

Integer i1= new Integer(0);
//This will run and execute perfectly
System.out.println(i1.intValue());


Object i2= new Integer(0);      
//This will throw an error as `Object` class doesn't have `intValue()` method.
System.out.println(i2.intValue());

Это живой рабочий демо , так что вы можете видеть это.

1 голос
/ 08 ноября 2019

Они по сути одинаковы, но компилятор обрабатывает Person student как Person без какой-либо информации о типе из конкретного класса Employee

...