6 ответов:
учебник на самом деле не требуется для этого. Читайте дальше инкапсуляция
private String myField; //"private" means access to this is restricted public String getMyField() { //include validation, logic, logging or whatever you like here return this.myField; } public void setMyField(String value) { //include more logic this.myField = value; }
в Java геттеры и сеттеры являются совершенно обычных функций. Единственное, что делает их геттерами или сеттерами-это конвенция. Геттер для foo называется getFoo, а сеттер-setFoo. В случае логического значения геттер называется isFoo. Они также должны иметь определенное объявление, как показано в этом примере геттера и сеттера для 'name':
class Dummy { private String name; public Dummy() {} public Dummy(String name) { this.name = name; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }причина использования геттеров и сеттеров вместо того, чтобы сделать ваши члены открытыми, заключается в том, что это делает возможным чтобы изменить реализацию без изменения интерфейса. Кроме того, многие инструменты и наборы инструментов, использующие отражение для изучения объектов, принимают только объекты, имеющие геттеры и сеттеры. JavaBeans должны иметь геттеры и сеттеры, а также некоторые другие требования.
class Clock { String time; void setTime (String t) { time = t; } String getTime() { return time; } } class ClockTestDrive { public static void main (String [] args) { Clock c = new Clock; c.setTime("12345") String tod = c.getTime(); System.out.println(time: " + tod); } }при запуске программы, программа запускается в сети,
- объект c создан
- функции
setTime()вызывается объектом c- переменная
timeустанавливается в пределах стоимости перешедшего к- функции
getTime()вызывается объектом c- время вернулся
- он будет проходить до
todиtodвам распечатать
вы также можете прочитать "почему методы getter и setter являются злыми":
хотя методы getter / setter являются обычным явлением в Java, они не являются особенно объектно-ориентированными (OO). Фактически, они могут повредить ремонтопригодность вашего кода. Кроме того, наличие многочисленных методов getter и setter является красным флагом, что программа не обязательно хорошо разработана с точки зрения OO.
в этой статье объясняется, почему вы не должны использовать геттеры и сеттеры (и когда вы можете их использовать) и предлагает методологию проектирования, которая поможет вам вырваться из менталитета геттера/сеттера.
1. Лучшие геттеры / сеттеры умны.
вот пример javascript из mozilla:
var o = { a:0 } // `o` is now a basic object Object.defineProperty(o, "b", { get: function () { return this.a + 1; } }); console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)я использовал их много, потому что они высокий. Я бы использовал его при получении фантазии с моим кодированием + анимацией. Например, сделайте сеттер, который имеет дело с
Numberкоторый отображает это число на вашей веб-странице. Когда сеттер используется он анимирует старое число на новое число с помощью tweener. Если исходное число равно 0 и вы устанавливаете его на 10, тогда вы увидите, что числа быстро переворачиваются от 0 до 10, скажем, на полсекунды. Пользователи любят этот материал, и это интересно создавать.2. Геттеры / сеттеры в php
пример из sof
<?php class MyClass { private $firstField; private $secondField; public function __get($property) { if (property_exists($this, $property)) { return $this->$property; } } public function __set($property, $value) { if (property_exists($this, $property)) { $this->$property = $value; } return $this; } } ?>цитирование:
пример здесь, чтобы expalin этот самый простой способ использования getter и setter в "java". можно сделать это более прямым способом, но getter и setter имеют что-то особенное, что при использовании частного члена родительского класса в дочернем классе в наследовании. вы можете сделать это возможным с помощью геттера и сеттера.
package stackoverflow; public class StackoverFlow { private int x; public int getX() { return x; } public int setX(int x) { return this.x = x; } public void showX() { System.out.println("value of x "+x); } public static void main(String[] args) { StackoverFlow sto = new StackoverFlow(); sto.setX(10); sto.getX(); sto.showX(); } }
Comments