Acho que vc esqueceu coisa de mais eim… 
Vamos lar.
SuperClasse e Subclasse:
Superclasse, quando alguma classe é criada com a palavra extends …,
o classe em extends é a superclasse desta recem criada.
Superclasse quer dizer que ela é superior na hierarquia de classes em alguma ocasião.
Ex:
class Carro {}
class Uno extends Carro {}
Carro é a superclasse de Fiat pois se encontra numa posção superior a Fiat na hierarquia, e Fiat é uma subclasse de Carro esta abaixo, herda o comportamento da Classe Carro.
Interfaces e overriden:
Em algumas linguagens de programação é permitindo herança multipla. Quero dizer que se java permitisse a classe Fiat do exemplo anterior poderia fazer mais de um extends ex:
class Uno extends Carro, Fiat {}
Mas isso infelizmente não é possível, então existem as interfaces que são um tipo especial de classes, as diferenças é que elas naum podem possuir atributos/variaveis de instância e seus métodos naum podem ser implementados ex:
public interface Fiat {
public int getCavalos();
}
já para a sub classe de Fiat, Uno, poder ser um Fiat, a sintaxe é essa.
class Uno extends Carro implements Fiat {
private int cavalos;
public int getCavalos() {
return cavalos;
}
E com interfaces você pode colocar várias. Naum sei o número possível de implements se existe um limite, mas gostei vou verificar. rs
Já overriden é quando vc sobrescreve um método que existe em sua superclasse. válido para o exemplo acima.
Enum:
Isso é um outro tipo de classe, só que essa naum possui métodos e nem instância, somente atributos ex:
public enum Veiculo {
Uno, Palio;
}
Seus atributos são constantes e recebem um valor automático iniciado do 0. Elas existem para vc naum precisar mais criar uma interface ou classe com constantes para serem utilizadas em seu software.
Varargs:
Isso é legal, chama-se argumentos variaveis e quando um método declarava um de seus parametros como Array para receber um número variavel de argumentos o usuário do método tinha que criar um array, agora basta vc passar um parametro após o outro e ponto. ex:
class Uno extends Carro implements Fiat {
private Vector<String> pessoas = new Pessoas<String>();
public void setPessoas(String… nomes) {
for(String nome : nomes)
pessoas.add(nome);
}
public static void main(String[] args) {
Uno uno = new Uno();
uno.setPessoas(“Bruno”, “Carol”);
}
}
estático e this:
Quer dizer que todos os Objetos instâncias de uma mesma classe vão utilizar a mesma referência de um atributo estatico ex:
class Uno extends Carro implements Fiat {
private static String nome;
public void setNome(String nome) {
this.nome = nome;
}
public void getNome() {
return this.nome;
}
public static void main(String args[]) {
Uno uno1 = new Uno();
Uno uno2 = new Uno();
uno2.setNome("teste de estatico e this");
System.out.println(uno1.getNome());
System.out.println(uno2.getNome());
}
}
Já o this esta dizendo para o compilador utilizar o a referÊncia de sua classe e naum de seu método ou de sua superclasse caso vc tenha dois métodos com o mesmo nome.
Ufa, espero ter ajudado.
t+