Avatar billede dresen Nybegynder
01. september 2005 - 03:24 Der er 5 kommentarer og
1 løsning

Spørgsmål omkring indkaspling

Hej eksperter

Efter at have ligget i programmeringsdvale i nogle år, skal jeg nu til at samle java-faklen op igen.

Under arbejdet med nedenstående program, overraskede det mig, at det er muligt at tilgå variablen "bachelorDegree" ved at referere direkte til den i metoden tester (student.bachelorDegree).

Hvorfor er denne variabel ikke indkapslet jf. dens private modifier?

Spiller det ind, at kaldet foretages fra et Student objekt til et andet (mener at kunne huske noget :)?

På forhånd tak!!

public class Student {

    private String fullName;
    private String cprNumber;
    private String bachelorDegree;
    private double gradeAverage;
       
    public Student(String fullName, String cprNumber, String bachelorDegree, double gradeAverage){
       
        this.fullName = fullName;
        this.cprNumber= cprNumber;
        this.bachelorDegree = bachelorDegree;
        this.gradeAverage = gradeAverage;
               
    }
       
    public void tester(Object obj){
       
        Student student = (Student) obj;
        System.out.println("1: " + student.bachelorDegree);
        System.out.println("2: " + student.getBachelorDegree());
       
    }
   
    public String getBachelorDegree(){
        return bachelorDegree;
    }
   
}

// -------------

public class StudentDriver {

    public static void main(String[] args) {

        Student student1 = new Student("Krede", "267279-2433", "HA.jur", 13);
       
        Student student2 = new Student("Driss Mekki", "250379-5491", "Master.bully", 9);
           
        student1.tester(student2);
                   
    }
}
Avatar billede arne_v Ekspert
01. september 2005 - 08:23 #1
private = kan kun tilgåes af alle metoder i klassen selv

tester er en metod ei kalssen selv så ...
Avatar billede dresen Nybegynder
01. september 2005 - 11:49 #2
Hej arne

Tak for dit svar.

Jeg er ikke helt sikker på at jeg er med på det.

Denne situation forstår jeg:

public void tester(Object obj){

  System.out.println(bachelorDegree);

}

Det der forvirrer mig, er at jeg ikke refererer til student1 instansvariablen bachelorDegree, men derimod til student2 bachelorDegree.
Avatar billede arne_v Ekspert
01. september 2005 - 12:00 #3
du kalder med student2 og så viser den jo student2

og private er på klasse niveau ikke på instans niveau - en metode i klassen kan
tilgå private members på alle instanser af klassen ikke kun på sin egen instans
Avatar billede dresen Nybegynder
01. september 2005 - 12:09 #4
Aha, den forskel har jeg ikke være opmærksom på

Det er vel normalt at man har nogle get-metoder til at returnere indholdet af sine private variable.

Har du nogle anbefalinger i forhold til kodestil. Er det bedre stil at kalde getBachelorDegree (som jo ville være nødvendigt, hvis kaldet blev foretaget fra en anden instans)selvom det i dette tilfælde er muligt at referere direkte.

Smid et svar. Jeg kommer først til at se dit svar ud på aftenen.

Mange tak
Avatar billede arne_v Ekspert
01. september 2005 - 12:13 #5
det er meget normalt med get og set metoder

Java bean konventionen kræver det

mange IDE'er kan selv generere get og set metoder

jeg vil nok foretrække field for egen instans og getter for anden instans

og svar
Avatar billede dresen Nybegynder
01. september 2005 - 19:17 #6
Hej arne

jeg følger din anbefaling. Tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester