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
}
}
пожалуйста, уточните, что всякий раз, когда мы используем наследование (или расширяет), поля (переменные и методы, кроме частных) копируют на дочерние (или вспомогательные) классы, или поля могут быть доступны только дочернему классу?
С ссылкой на ваш вопрос здесь вы только что получили доступ к частной переменной "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
Я придумал пример, который, надеюсь, поможет вам. Вы можете переопределить ваш метод 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. Если вам нужно изменить значение, вы можете переопределить сеттер аналогичным образом.