Eu entendo isso como composição ou relacionamento tem um, quando uma classe pode ter referencias a objetos de outra classe como membros.
Vê se isso ajuda:
"Suponha que seu instrutor peça para você escrever uma aplicação Java que modele um carro. De acordo com as especificações dele, esta aplicação deve declarar uma classe chamada Motor (que modela o motor do carro) e uma classe chamada Carro (que modela carros). Finalmente, a aplicação deve declarar uma classe chamada DemonstracaoCarro, que possua uma função main a fim de executar o programa.
Mas afinal, neste caso, o que é que o método main faz realmente? Neste caso o método main, por ser um método de classe especial, fica encarregado de criar objetos do tipo Carro (que possuam objetos do tipo Motor em cada um deles), colocar informações apropriadas em cada objeto (via chamadas a seus construtores) e (para cada carro) imprimir as informações de cada carro. Depois de um tempo escrevendo essa aplicação, você deve terminar com o seguinte código-fonte:
class Motor
{
private String tipo;
Motor(String tipo)
{
this.tipo = tipo;
}
}
class Carro
{
private String marca;
private String modelo;
private String fabricante;
Carro(String marca, String modelo, String fabricante)
{
this.marca = marca;
this.modelo = modelo;
this.fabricante = fabricante;
}
public String retornaMarca() { return marca; }
public String retornaModelo() { return modelo; }
public String retornaFabricante() { return fabricante; }
}
class DemostracaoCarro
{
public static void main(String listaDeArgumentos[]){
Motor m1 = new Motor(?3.8L V6?);
Carro c1 = new Carro(?Mustang?, ?Conversível?, ?Ford?);
Motor m2 = new Motor(?Zetec Roçam 1.0?);
Carro c2 = new Carro(?Ka?, ?Popular?, ?Ford?);
System.out.println( c1.retornaFabricante() + ? ? +
c1.retornaMarca() + ? ? +
c1.retornaModelo() + ? ? + m1.retornaTipo() );
System.out.println( c2.retornaFabricante() + ? ? +
c2.retornaMarca() + ? ? +
c2.retornaModelo() + ? ? + m2.retornaTipo() );
}
Muito bem! O código anterior segue as especificações e requisitos solicitados pelo instrutor. Por outro lado, esse código apresenta um problema de modelagem importante: as classes Carro e Motor estão desconectadas ou desacopladas uma da outra.
No mundo real, é comum dizer que um carro possui um motor, assim como pneus e outros itens. Em outras palavras, vários itens, incluindo um motor, compõem um carro. Em contraste, o código anterior mostra que um carro não compõe um carro e, neste caso, é possível criar objetos do tipo Carro sem um motor associado ? uma situação estranha. Você já imaginou alguém comprando um carro sem motor!? O erro de se criar um novo Carro sem um Motor resulta do fato das duas classes estarem desconectadas. A solução para esse erro consiste em conectar estas duas classes. É exatamente esse o assunto desta seção: composição de objetos.
"
fonte: http://www.leandro.wives.nom.br/java/oojava.htm