> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/constructores.md).

# Constructores

Un constructor e un método especial que se emprega en Java e en outras linguaxes orientadas a obxectos para instanciar un obxecto que pertence a unha clase. **Un dos obxectivos principais dun constructor é inicializar os valores dos atributos do obxecto que sexa posible inicializar**. Un constructor ten as seguintes características:

* Invocase mediante o operador **new** é o nome da clase
* Pode recibir parametros (ou non)
* Non especifica o tipo de retorno (Crea un obxecto da clase)

En java por defecto o definir unha clase estamos a definir un constructor baleiro.

```java
class Empregado {
 //...
}
```

```java
class App {
    public static void main (String[] args){
        Empregado e = new Empregado();
    }
}
```

Dentro da nosa clase empregado, imos a poder definir **constructores con parámetros** que nos van a facilitar a inicialización dos datos da clase. Por exemplo:

```java
class Empregado {
  String nome;
  double salario;
  
  public Empregado(String nome, double salario){
    nome = nome;
    salario = salario;
  }
}
```

```java
class App {
    public static void main (String[] args){
        Empregado e = new Empregado("Jose Luis", 1500);
    }
}
```

{% hint style="warning" %}
En j**ava por defecto** o definir unha clase estamos a definir **un constructor baleiro**.

Se definimos un **constructor de forma explicita**, o constructor por defecto deixa de ter validez. Se queremos traballar co baleiro vai a ser necesario definilo explicitamente.

**É posible definir mais de un constructor por clase.** Os constructores deben de ter un numero diferente de parámetros.

```java
class Empregado {
  String nome;
  double salario;
  
  public Empregado(){
  
  }
  
  public Empregado(String nome, double salario){
    nome = nome;
    salario = salario;
  }
}
```

{% endhint %}

## A palabra reservada this

A palabra reservada this é unha referencia ao obxecto actual no que nos atopamos. É unha boa práctica empregala para referenciar os atributos e métodos da clase e diferencialos por exemplo de parámetros.

```java
class CuentaBancaria {
    double saldo;
    String titular;
    
    // Constructor
    public CuentaBancaria(String titular) {
        this.titular = titular;  // this para diferenciar
        this.saldo = 0.0;
    }
    
    // Método que usa this para claridad
    void depositar(double saldo) {
        this.saldo = this.saldo + saldo;
        // this.saldo = atributo, saldo = parámetro
    }
}
```

## Sobrecarga de constructores

Como vimos previamente, é posible definir varios constructores diferentes:

```java
class CuentaBancaria {
    private double saldo;
    private String titular;
    
    // Constructor
    public CuentaBancaria(String titular, double saldo) {
        this.titular = titular;  // this para diferenciar
        this.saldo = saldo;
    }
    
     public CuentaBancaria(double saldo) {
        this.titular = "";  // this para diferenciar
        this.saldo = saldo;
    }
    
     public CuentaBancaria(String titular) {
        this.titular = titular;  // this para diferenciar
        this.saldo = 0.0;
    }
    
     public CuentaBancaria() {
        this.titular = "";  
        this.saldo = 0.0;
    }
}
```

No exemplo anterior, traballariamos con catro constructores diferentes, pero temos moita cantidade de código repetid&#x6F;**.** Nestes casos, **unha boa práctica e invocar un constructor dentro de outro empregando** a palabra reservada **this.**

```java
class CuentaBancaria {
    double saldo;
    String titular;
    
    // Constructor
    public CuentaBancaria(String titular, double saldo) {
        this.titular = titular;  // this para diferenciar
        this.saldo = saldo;
    }
    
     public CuentaBancaria(double saldo) {
        this("",saldo);
    }
    
     public CuentaBancaria(String titular) {
        this(titular, 0.0);
    }
    
     public CuentaBancaria() {
        this("",0.0);
    }
}
```

{% hint style="warning" %}
**A chamada a this ten que ser obligatoriamente a primeira chamada dentro do constructor**
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud3-introducion-a-programacion-orientada-a-obxectos/constructores.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
