Java и изменение сторонних классов

Захотелось изменить сторонний класс, подключаемый как import org.openqa.selenium.interactions.Actions; Другими словами, подключение идет из стороннего источника и я никак не могу редактировать его... Если бы мог, я бы тут не сидел...

Появилась идея создать свой класс в проекте, и скопировав туда код исходника, переименовав имена функций и т.п., создать его копию, но, как вы понимаете, ничего не работает )))

Отсюда вопросы:

Вопрос 1

В классе Actions подключаются сторонние библиотеки, соответственно, если класс рабочий, то подключены все необходимые библиотеки.

import java.time.Duration;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.IntConsumer;
import java.util.logging.Logger;
import org.openqa.selenium.Keys;
import org.openqa.selenium.UnsupportedCommandException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.PointerInput.Kind;
import org.openqa.selenium.interactions.PointerInput.MouseButton;
import org.openqa.selenium.interactions.PointerInput.Origin;
import org.openqa.selenium.interactions.internal.MouseAction.Button;

Тогда почему компилятор ругается на неизвестные ему классы ?

 private final Map<**InputSource, Sequence**> sequences = new HashMap();
    private final **PointerInput** defaultMouse;
    private final **KeyInput** defaultKeyboard;
    private final **Keyboard** jsonKeyboard;
    private final **Mouse** jsonMouse;
    protected **CompositeAction** action;

Вопрос 2

Если подключить все необходимые библиотеки, то появляется ошибка:

'size()' is not public in 'org.openqa.selenium.interactions.Sequence'. Cannot be accessed from outside package в функции

private Sequence getSequence(InputSource source) {
        Sequence sequence = (Sequence)this.sequences.get(source);
        if (sequence != null) {
            return sequence;
        } else {
            int longest = 0;

            Sequence examining;
            for(Iterator var4 = this.sequences.values().iterator(); var4.hasNext(); longest = Math.max(longest, examining.size())) {
                examining = (Sequence)var4.next();
            }

            sequence = new Sequence(source, longest);
            this.sequences.put(source, sequence);
            return sequence;
        }
    }

Если данный метод (examining.size()) не является публичным, то как он работает в классе оригинала?


Ответы (2 шт):

Автор решения: Igor

Онo там работает, потому что они в одном пакете (package) и поэтому имеют доступ к элементам друг друга с модификаторoм доступа по умолчанию.


Как Вы собираетесь использовать этот копию-класс?

→ Ссылка
Автор решения: Zhenyria

Насколько я вижу, этот класс не отмечен как final. А значит, вы можете создать свой класс, наследоваться от этого класса и переопределить нужные вам методы. В них же вы можете вызывать методы класса-родителя вот так: super.someMethod(). Не получится переопределить только те методы, которые final.

→ Ссылка