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

1
class Sup
{
    private int i; //private one,not gonna get inherited.
    void seti(int s) //this is to set i.but which i is going to set becz i is also in child class?
    {
    i=s;
    System.out.println(i+"of sup class"); //to verify which i is changed

    }

}

class Cid extends Sup //this is child class
{
    private int i; //this is 2nd i. i want to change this i but isnt changing on call to the seti method
    void changi(int h) //this one is working in changing the 2nd i.
    {
        i=h;
    }
    void showci()
    {
     System.out.println(i+"of Cid class");   
    }
}

class Test
{
    public static void main(String[] args)
    {

        Cid ob= new Cid();
        ob.seti(3); //to set i of Cid class but this sets Sup class i
        ob.showci(); //result shows nothing changed from Cid class i
        ob.changi(6); // this works as i wanted
        ob.showci(); // now i can get the i changed of Cid class

    }

}

пожалуйста, уточните, что всякий раз, когда мы используем наследование (или расширяет), поля (переменные и методы, кроме частных) копируют на дочерние (или вспомогательные) классы, или поля могут быть доступны только дочернему классу?

  • 0
    Это действительно не ясно, что вы спрашиваете, извините.
  • 0
    я имею в виду, могу ли я изменить переменную, существующую в классе Cid, используя методы, принадлежащие классу Sup.
Показать ещё 12 комментариев
Теги:
methods
inheritance

2 ответа

0

С ссылкой на ваш вопрос здесь вы только что получили доступ к частной переменной "i", когда вы расширили класс Sup, у вас появился только метод seti() из класса sup, который устанавливает значение var "i" в суперклассе, но если вы переопределяете метод seti() в классе Cid Чем вы сможете изменить значение я в подклассе:

В этом случае вам необходимо использовать

Sup s = new Cid();
s.seti(10); // this will change the value of i in subclass class 
0

Я придумал пример, который, надеюсь, поможет вам. Вы можете переопределить ваш метод super в подклассе:

супер:

public class SuperClass {

    private String s = "SuperClass";

    public String getProperty() {
        return s;
    }

    public void print() {
        System.out.println(getProperty());
    }
}

суб:

 public class SubClass extends SuperClass {

    private String s = "SubClass";

    @Override
    public String getProperty() {
        return s;
    }
}

Применение:

SuperClass actuallySubClass = new SubClass();
actuallySubClass.print();

вывод:

SubClass

Таким образом, у вас нет прямого доступа к суб-частному полю как таковое из суперкласса, но вы все равно можете получить доступ к нему с помощью расширенного getter. Если вам нужно изменить значение, вы можете переопределить сеттер аналогичным образом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню