Gå til innhold

[Løst] Hva er hensikten til "this" ?


Anbefalte innlegg

Hei!

Dette er noe jeg har tenkt lenge på, jeg sliter rett å forstå hensikten med "this"

 

hvis vi f.eks har en konstruktør (anta at navn og alder er feltvariabler):

 

public klasse (String navn, int alder){
this.navn
this.alder;
}

 

public klasse (String n, int a){
navn = n;
alder = a;
}

 

hva er forskjellen på disse konstruktørene og hva er hensikten til this?

Endret av 13375k1133z
Lenke til kommentar
Videoannonse
Annonse

this er en peker til objektet du er i. (Litt dårlig formulert kanskje?) Ta følgende eksempel:

 

public class MyClass {
private String name;

public MyClass(String name) {
	name = name;		// Denne vil ikke gjøre særlig mye
	this.name = name;	// Denne vil sette medlemsvariabelen name, til innholdet i variabelen name (argumentet)
}
}

 

Konstruktørene nedenfor, derimot, gjør akkurat det samme, men det kan argumenteres for at den første er mer lesbar:

 

public MyClass(String n) {
this.name = n;
}

public MyClass(String n) {
name = n;
}

 

Lenke til kommentar

På sparket kommer jeg ikke på noe "konkret" den lar deg gjøre, som du ikke på annet vis får gjort. Men den gjør (etter min mening) kode mye mer leselig, ved at den forteller at denne metoden kalles på dette objektet, eller denne variabelen er en medlemsvariabel osv.. Enn om du f.eks. kaller en metode "ut fra løse luften".

 

Hovedbruken (rett meg hvis jeg tar feil) til "this" er vel å la deg bruke "shadowed" felter, som i eksemepelet mitt over, eller lignende.

 

"this" kan vel også brukes til å kalle andre konstruktører inne den samme klassen. Står litt mer om det her.

Lenke til kommentar

Du kan f.eks. bruke this til å konstruere medlemmer som trenger en referanse til deg selv. Det under kunne ikke gjøres uten this:

class Parent {
String name;
Child child;

public Parent(String name) {
	this.name = name;
	child = new Child("Ole Nordmann", this); //< Merk bruken her
}
}

class Child {
String name;
Parent parent;

public Child(String name, Parent parent) {
	this.name = name;
	this.parent = parent;
}
}

Et annet eksempel:

public MyFrame extends JFrame implements MouseListener {
public MyFrame() {
	this.setTitle("Demo");
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	// Add mouse listener
	this.addMouseListener(this); //< Merk bruken her

	this.setSize(640, 480);
	this.setVisible(true);
}

public mousePressed(MouseEvent e) {
	System.out.println("Mouse pressed!");
}

public mouseReleased(MouseEvent e) {
	System.out.println("Mouse released!");
}
}

Endret av LostOblivion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...