Skip to content

Latest commit

 

History

History
61 lines (52 loc) · 1.39 KB

accessors.md

File metadata and controls

61 lines (52 loc) · 1.39 KB

Accessors

When a field is hidden that is usually because you want to control how it might be changed.

To access the current value of a private field you need to go through a non-private method. If a method just provides access to a field we call that an "accessor."

class Dog {
    private String name;

    Dog(String name) {
        this.name = name;
    }

    // The name field is private, but
    // you can access it by calling the name method.
    String name() {
        return this.name;
    }
}
class Main {
    void main() {
        var dog = new Dog("Daisy");

        // dog.name won't work because the name field is private
        // dog.name() will work because the name method is not
        System.out.println(dog.name());
    }
}
~class Dog {
~   private String name;
~
~   Dog(String name) {
~       this.name = name;
~   }
~
~    String name() {
~        return this.name;
~    }
~}

We would also consider things like the length method on Strings to be "accessors."1

void main() {
    String s = "abc";
    System.out.println(
        // We can't see what fields underly this,
        // but we can access the length
        s.length()
    );
}

Footnotes

  1. Not that the categorization matters much, but socially we expect "accessor"-looking methods to only give you a value and not "do stuff" like increment a number or mess with a file.