Професионална програма
Loading...
sasho95 avatar sasho95 0 Точки

Защо super реферира към обекта със който съм извикал метода а не към нещо от суперкласа.

public class Fragile_Base_Class_Main {

public static void main(String[] args) {
    RandomArrayList randomArrayList = new RandomArrayList();
    randomArrayList.add(12);
    randomArrayList.add(15);
    randomArrayList.add("gosho");
    randomArrayList.add("pesho");
    randomArrayList.add(4);
    randomArrayList.add(3);
    randomArrayList.add(7);
    randomArrayList.add("dsa");
    while (randomArrayList.size() > 0) {
        System.out.println(randomArrayList.getRandomElement());
    }
}
public class RandomArrayList extends ArrayList {
    public Object getRandomElement() {
        int rnd = (int) Math.round(Math.random() * (super.size() - 1));
        Object temp = super.get(rnd);
        super.remove(rnd);
        return temp;
    }
}

int rnd = (int) Math.round(Math.random() * (super.size() - 1)); в ето този ред. Това super.size() защо реферира към сайза на обекта със който съм викал метода? Не трябва ли със this.size() да реферираме към него а със super.едиКаквоСи към методи,полета и контруктори от superclass, но не към неща от subclass

Тагове:
0
Java OOP Basics 21/05/2017 20:36:23
TodorAtanasov avatar TodorAtanasov 30 Точки

Ще се пробвам да обясня... ако не успея извинявам се. Твоят клас (RandomArrayList) наследява parent класа и ползва неговите полета. Ти в твоя клас нито override-ваш метода size() нито имаш поле size. Ако си напишеш твое поле size което да държи нещо и му напишеш гетър size() който ще е override на size() на родителя то тогава ще ги ползваш така. Като нямаш оверайд и поле твоя клас ползва тези от горе и няма супер и тхис то е само 1. (май не ме бива да обеснявам )

0