Java объявление объекта - PullRequest
0 голосов
/ 02 апреля 2020

Привет, ребята, я изучаю java, и я запутался в объявлении объекта, когда есть подкласс. если строка гласит: Суперкласс a = new Subclass (); будет ли объект суперкласса или подкласса типа? и сможете ли вы использовать методы как в классе суперкласса, так и в классе подкласса?

Ответы [ 5 ]

1 голос
/ 02 апреля 2020

Вы можете думать о нем, как о создании объекта подкласса, но с прикреплением к нему метки (то есть типа) суперкласса. Компилятор просматривает эту метку и видит SuperClass, поэтому доступны только поля и методы SuperClass, хотя на самом деле это объект SubClass.

0 голосов
/ 02 апреля 2020

Когда переменная объявлена, ее тип определяется с ней. Его назначение не влияет на его тип. Его тип - то, как это может использоваться и только как это может использоваться. Подклассы этого типа могут иметь дополнительные функции, но когда тип не является этим подклассом, эти функции недоступны, поскольку в отношении любой принимающей функции он использует тип как способ определения доступных функций.

Рассмотрим следующие фрагменты кода:

public class SuperClass {
    ...
    public void normalFunction(){...}
    ...
}

//

public class SubClassA extends SuperClass {
    ...
    public void specialFunctionA(){...}
    ...
}

//

public class SubClassB extends SuperClass {
    ...
    public void specialFunctionB(){...}
    ...
}

//

public class Demo {
    public static void main(String[] args){
        SubClassA a = new SubClassA();
        a.specialFunctionA(); //it's ok here because here its TYPE is SubClassA
        a.normalFunction(); //also fine because superclass functions are inherited
        someFunction(a);
    }

    public void someFunction(SuperClass sc){
        sc.specialFunctionA(); // How could we know whether specialFunctionA is available?
        sc.specialFunctionB(); // How could we know whether specialFunctionB is available?
        sc.normalFunction(); // fine because this function is declare in SuperClass
    }
}
0 голосов
/ 02 апреля 2020

В java если вы передадите ссылку на подкласс в объект суперкласса, вы сможете получить доступ только к методу и переменной в суперклассе.

  • Допустим, у вашего подкласса есть один метод print (), но ваш суперкласс недоступен, тогда вы не сможете получить доступ к этому методу подкласса
  • , даже если ваш метод подкласса переопределит суперкласс, тогда он вызовет метод подкласса при вызове их
0 голосов
/ 02 апреля 2020
  1. Объект будет иметь тип SubClass
  2. Вы не можете просто использовать методы SubClass, потому что компилятор java думает, что объект является Superclass и не позволит вам кодировать вызов методов SubClass. Для этого вам нужно кастовать вот так:

    ((SubClass)a).subClassMethod()

0 голосов
/ 02 апреля 2020

Вы сможете использовать только методы суперкласса. Подробнее об одежде см. Здесь: https://www.w3schools.com/java/java_inheritance.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...