[java] hvorfor har min main adgang til en protected metode?

Du kan i dette forum stille og svare på spørgsmål vedrørende Java programmering på alle typer platforme.
Besvar
skills jokes
Nørd
Nørd
Indlæg:125
Tilmeldt:12. sep 2013, 17:03
[java] hvorfor har min main adgang til en protected metode?

Indlæg af skills jokes » 3. jul 2014, 21:22

hejsa,

jeg har lige set episode 21 af java serien her på nemprogrammering.dk

hvor vi lære om public private og protected.

i de tidligere episoder har vi lært om objekter og sådan,
så vi har før lavet en klasse der hed "bog" hvor i vi lavede nogle variabler som vi skulle lave metoder til at "set" og "get",
og her i episode 21 er øvelsen til sidst at vi går ind i den klasse og laver vores variabler public private eller protected, så det har jeg gjort og min bog klasse ser nu sådan her ud:

Kode: Vælg alt

public class bog{
	protected int sider = 0;
	protected double pris = 0.0;
	protected String navn;
	protected String forfatter;
	
	//Set Metoder:
	public void setSider(int sider){
		this.sider = sider;
	}
	public void setPris(double pris){
		this.pris = pris;
	}
	public void setNavn(String navn){
		this.navn = navn;
	}
	public void setForfatter(String forfatter){
		this.forfatter = forfatter;
	}
	
	//Get Metoder:
	public int getSider(){
		return sider;
	}
	public double getPris(){
		return pris;
	}
	public String getForfatter(){
		return forfatter;
	}
	
	//Andre Metoder:
	protected void info(){
		System.out.println(navn + " af " + forfatter + " ~ " + pris + "DKK");
	}
}
"bog" er en super klasse, så jeg har også en sub klasse som extender fra "bog", så det er derfor at jeg har lavet metoden "info" til protected, så at dens sub klasse også har adgang til den......så....som jeg har forstået det, burde klassen selv, og sub klassen have adgang til den her "info" metode, og ingen andre.
men så bare for at teste det, prøvede jeg alligevel at kalde "info" metoden fra "bog" klassen:

Kode: Vælg alt

public class main {
	public static void main(String[] args){
		
		bog bog0 = new bog();
		
		bog0.info();
		
		
	}
}


og, af en eller anden grund virker det fint? burde jeg ikke få en error som siger at min main ikke har adgang til "info" metoden i "bog" klassen fordi den er protected og kun den og dens sub klasse har adgang til det???

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: [java] hvorfor har min main adgang til en protected meto

Indlæg af cristian » 4. jul 2014, 12:21

og, af en eller anden grund virker det fint? burde jeg ikke få en error som siger at min main ikke har adgang til "info" metoden i "bog" klassen fordi den er protected og kun den og dens sub klasse har adgang til det???
I din kode vist extender du ikke fra din superklasse.

Men protected gør ikke at du ikke kan nå din metode inde i klassen fra en sub-klasse(det er netop det den gør), det gør bare at du ikke kan nå den fra "world".
Hvis du ville have en metode i en klasse som ikke skal kunne nås udenfor klassen, så lav den private.

Se mere her
http://stackoverflow.com/questions/2154 ... nd-private

Håber det hjælper

Vh
Cristian

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: [java] hvorfor har min main adgang til en protected meto

Indlæg af seerex » 14. jul 2014, 10:30

Hej skills jokes,

Java har desværre "sløret" lidt for protected. Som det også fremgår af det link som christian sendte fra Stackoverflow, så står der at protected betyder at man kan tilgå det fra noget der hedder samme "package". Det betyder, at ligger filerne i den samme Java package, så kan man faktisk godt tilgå protectede metoder. Man bør dog aldrig gøre det, da det er lidt dumt at Java har valgt at gøre det. Man kan selvfølgelig godt arbejde med det hvis man opdeler sine klasser i packages, men som hovedregel bør man gøre som fremlagt i videoen:

Private - KUN klassen selv har adgang til det
Protected - Klassen og dens sub-klasser har adgang til det (Java mener desværre også packages)
Public - ALLE har adgang til det

Håber det hjælper :) Så ja, det du har lavet virker, men man bør ikke gøre det :) Sådan er programmering nogen gange ^^ Hvis man ønsker at bruge noget som du har gjort, og kalde det ude fra "main" så kan man lige så godt lave det public og ikke protected :)

mvh - Jeppe

Besvar