Помогите с абстрактным классом в Java с закрытой переменной типа List <E>

Прошло два года с тех пор, как я последний раз что-то кодировал на Java, поэтому мои навыки кодирования немного устарели.

Мне нужно сохранить данные (профиль пользователя) в разных структурах данных,ArrayList а такжеLinkedListи оба ониList, Я хочу избежать дублирования кода там, где я могу, и я также хочу следовать хорошим практикам Java.

Для этого я пытаюсь создать абстрактный класс, где частные переменные будут иметь типList<E>&nbsp;а затем создать 2 подкласса в зависимости от типа переменной.

Дело в том, что я не знаю, правильно ли я это делаю, вы можете взглянуть на мой код:

Класс: DBList

import java.util.List;

public abstract class DBList {

    private List<UserProfile> listName;
    private List<UserProfile> listSSN;

    public List<UserProfile> getListName() {
    return this.listName;
    }

    public List<UserProfile> getListSSN() {
    return this.listSSN;
    }

    public void setListName(List<UserProfile> listName) {
    this.listName = listName;
    }

    public void setListSSN(List<UserProfile> listSSN) {
    this.listSSN = listSSN;
    }

}

Класс: DBListArray

import java.util.ArrayList;

public class DBListArray extends DBList {

    public DBListArray() {
    super.setListName(new ArrayList<UserProfile>());
    super.setListSSN(new ArrayList<UserProfile>());
    }

    public DBListArray(ArrayList<UserProfile> listName, ArrayList<UserProfile> listSSN) {
    super.setListName(listName);
    super.setListSSN(listSSN);
    }

    public DBListArray(DBListArray dbListArray) {
    super.setListName(dbListArray.getListName());
    super.setListSSN(dbListArray.getListSSN());
    }

}

Класс: DBListLinked

import java.util.LinkedList;

public class DBListLinked extends DBList {

    public DBListLinked() {
    super.setListName(new LinkedList<UserProfile>());
    super.setListSSN(new LinkedList<UserProfile>());
    }

    public DBListLinked(LinkedList<UserProfile> listName, LinkedList<UserProfile> listSSN) {
    super.setListName(listName);
    super.setListSSN(listSSN);
    }

    public DBListLinked(DBListLinked dbListLinked) {
    super.setListName(dbListLinked.getListName());
    super.setListSSN(dbListLinked.getListSSN());
    }

}

1)&nbsp;Есть ли в этом смысл? Что я делаю неправильно? У вас есть какие-нибудь рекомендации?

2)&nbsp;Для меня было бы больше смысла иметь конструкторы вDBList&nbsp;и зовет их (сsuper()) в подклассах, но я не могу этого сделать, потому что я не могу инициализировать переменную сnew List<E>().

3)&nbsp;Считалось, что я делаю глубокие копии, когда это возможно, и для этого я всегда отменяюclone()&nbsp;метод моих классов и код его соответственно. Но у этих классов никогда не было списков, наборов или карт, у них были только строки, целые числа, числа с плавающей запятой. Как мне сделать глубокие копии в этой ситуации?