Переменные экземпляра в Java - PullRequest
1 голос
/ 02 июня 2011

Пожалуйста, объясните следующее поведение.

class Base
{
    public int num = 3;

    public int getNum()
    {
        return num;
    }

    public void setNum(int num)
    {
        this.num = num;
    }
}


class child
    extends Base
{
    public int num = 4;

    public child()
    {

    }

    public child(int i)
    {
        this.num = i;
    }

    public int getNum()
    {
        return num;
    }

    public void setNum(int num)
    {
        this.num = num;
    }
}

public class Main
{

   public static void main(String[] args)
   {

        Base obj2 = new child();
        System.out.println(obj2.num);
        System.out.println(obj2.getNum());

        Base obj3 = new child(10);
        System.out.println(obj3.num);
        System.out.println(obj3.getNum());
    }
}

Выход: 3 4 3 10

Здесь показано, как obj2.num и obj3.num по-прежнему указывают на значение 3, назначенное в переменной экземпляра базового класса. Не будет переопределена как obj2.getNum () и obj3.getNum ().

Спасибо заранее.

1 Ответ

1 голос
/ 02 июня 2011

Поскольку объекты объявляются с типом суперкласса, вы получаете значение переменной супер члена.

Если объект был объявлен с типом подкласса, значение будет переопределено.

Если Base obj3 = new child(10); изменен на child obj3 = new child(10);, то результат будет 3 4 10 10

Это хорошо объяснено здесь

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