Gå til innhold

[Løst] Hva er feil her?


Anbefalte innlegg

Videoannonse
Annonse

Da hadde man støtt på et nytt problem... :)

 

Main2 klassen skal hente ut innholdet Kursbok2 klassen sin "visTittel" metode, og skrive det ut på skjermen via et dialogvindu.

 

Det ser logisk riktig ut for meg, men vil ikke kompilere...

 

 

post-69907-0-47136700-1377814621_thumb.png

post-69907-0-45371000-1377814632_thumb.png

Lenke til kommentar

Hvorfor poster du bilder i stedet for å copy-paste teksten?

 

visTittel har ingen retur-type, og du returnerer heller aldri noe fra den.

 

Fordi da blir det seende slik ut:

 

public class Kursbok2

{

public visTittel()

{

String emne = "Matte";

}

}

Kjappere å poste bilde da imo :)

Hva må gjøres i praksis for å gjøre det du beskriver?

Lenke til kommentar

Som sagt over, så returnerer ikke visTittel noen verdi.

Det eneste metoden gjør, er å sette emne = "Matte", for å så returnere til main-metoden.

 

Jeg hadde gjort noe ala:

 

import javax.swing.JOptionPane;
public class Main2 {
   public static void main(String[] args) {
      Kursbok2 kursbok2 = new Kursbok2("Matte");
      JOptionPane.showDialoge(null, kursbok2.visTittel());
   }
}
 
 
 
public class Kursbok2 {
   private String tittel;
   public Kursbok2(String tittel) {
      this.tittel= tittel;
   }
   public String visTittel() {
       return tittel;
   }
}

 

Da setter du tittelen i den initialiseres, og den skrives ut(returneres) via visTittel()-metoden.

Lenke til kommentar

Fordi da blir det seende slik ut:

 

Kjappere å poste bilde da imo :)

 

Hva må gjøres i praksis for å gjøre det du beskriver?

#1: Nei, det gjør det ikke.

#2: Bruk en skikkelig editor.

#3: Det å bruke bilder gjør også at det er umulig å copy-paste, det skalerer ikke (størrelse), det respekterer ikke mine fonter og, ikke minst, det er MYE mer data å laste. Det å poste bilder er moronic.

Endret av Lycantrophe
Lenke til kommentar

Takk for tilbakemeldinger :) Jeg endte opp med å gjøre slik:

public class Kursbok2
{
	String emne = "Matte";
	
	public String visTittel()
	{
		return emne;
	}
	
}

Slik jeg har forstått det, så gjør nøkkelordet "private" at en variabel kun kan hentes fram i sin egen klasse. Men putter jeg "private" foran "String emne" ovenfor, så får jeg fortsatt hentet ut variabelen i main klassen min. How come?

Lenke til kommentar

Les her, tabellen på den siden viser det veldig godt.

 

Slik koden din er over kan du bruke 'kursbok2.emne = "hva-som-helst";' fra main-klassen din, det kan du ikke hvis du legger til "private" foran "String emne" i Kursbok2. Det er svært ofte en dårlig idé å la variabler være mulig å endre på den måten. Det er en god regel å være så streng som mulig, la alt som kan være "private" være det.

 

Metoden "visTittel" returnerer en referanse (tenk på det som en adresse) til det samme String-objektet som referansen "emne" peker på (altså en kopi av emne). Hvis main-klassen nå endrer på objektet som denne referansen peker på, vil selvfølgelig "emne" også gjenspeile disse endringene, siden det er samme referanse. Dette kan imidlertid ikke skje, da String er "immutable" (kan ikke endres etter at objektet er opprettet).

Endret av jonny
Lenke til kommentar

Les her, tabellen på den siden viser det veldig godt.

 

Slik koden din er over kan du bruke 'kursbok2.emne = "hva-som-helst";' fra main-klassen din, det kan du ikke hvis du legger til "private" foran "String emne" i Kursbok2. Det er svært ofte en dårlig idé å la variabler være mulig å endre på den måten. Det er en god regel å være så streng som mulig, la alt som kan være "private" være det.

 

Ja, det er slik jeg også har forstått det.

Men jeg får hentet ut variabelen "emne" i main klassen, selv om jeg skriver private foran.

Slik at det med andre ord blir:

public class Kursbok2
{
	private String emne = "Matte";
	
	public String visTittel()
	{
		return emne;
	}
	
}

Her skulle det da ikke være mulig å hente ut denne variabelen i main klassen min ettersom den er deklarert som private?

Endret av Defo
Lenke til kommentar

Takk for tilbakemeldinger :) Jeg endte opp med å gjøre slik:

public class Kursbok2
{
	String emne = "Matte";
	
	public String visTittel()
	{
		return emne;
	}
	
}

 

Dersom dette er hele klassen din; hvorfor er ikke emne const (final i java?)? Hvorfor er emne en medlemsvariabel i det hele tatt?

 

Videre får du ikke hentet den ut; du får returnert en kopi. Stor forskjell. Private betyr bare at ingen kan røre medlemmet med object.emne; de må gå via en metode.

 

Det virker kanskje tungvindt, og det med god grunn. Det er første tegn på at du gjør noe galt. Det det også gjør er at du kan håndtere input, for eksempel bare godkjenne enkelte emner.

 

Private gjør altså bare at medlemmet ikke eksponeres ut av objektet. Det er fortsatt 100% tilgjengelig for alt som er en del av klassen. Inkludert deres evne til å returnere en kopi av strengen.

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...