Однако, такой подход может позволить установить следующие значения:
cat_1.weight = -12;
cat_1.age = -1;
Обеспечив public доступ к атрибутам, мы не можем запретить присваивание им неправильных значений. Более правильным подходом является создание private переменных и специальных методов public доступа get- и set- методы, так называемые “гетеры” и “сетеры”. В этом случае мы можем обеспечить более полный контроль.
Вспомним, как мы инициализировали состояние объекта класса Cat:
Википедия определяет инкапсуляцию следующим образом:
Названия методов получения и изменения значений Value принято начинать со слов get и set, т.е. getValue и setValue
T getVar()
setVar( T val )
T[] getArr()
setArr( T[] val )
Если переменная называется var, а ее тип T, то методы должны быть следующими:
Если переменная имеет тип boolean, то желательно вместо «геттера» иметь метод:
boolean isVar()
В названии метода первая буква имени переменной вводится на верхнем регистре. В тех случаях, когда минимум две первых буквы имени переменной введены на верхнем регистре, имя переменной в названии метода никак не трансформируется. Например, если имя переменной
String URL;
String getURL()
setURL( String val )
выглядеть так:
то сигнатуры методов будут
Локальные переменные и параметры, имена которых совпадают с именами переменных экземпляра и класса перекрывают последние.
Для того, чтобы в методе обратиться к перекрытой переменной экземпляра используется ссылка this на данный экземпляр.
// использование:
ScopeExample scope = new ScopeExample();
scope.firstMethod();
Перекрыты переменные i и num.
Cat[] cats = new Cat[3];
cats[0] = new Cat( "Perl", 12, 3 );
cats[1] = new Cat( "Bonny", 12, 10 );
cats[2] = new Cat( "Fuzzy", 10, 2 );
for( Cat c : cats ) {
c.printDescription();
}
Также как и массив примитивов, массив ссылок можно создать и сразу проинициализировать:
Cat[] cats = {
new Cat( "Perl", 12, 3 ),
new Cat( "Bonny", 12, 10 ),
new Cat( "Fuzzy", 10, 2 );
}
public int avg( int a, int b ) {
return (a + b)/2;
}
public float avg( float a, float b ) {
return (a + b)/2;
}
Перегрузка может осуществляться и по разному количеству параметров.
public float avg( float a, float b, float c ) {
return (a + b + c)/3;
}
Если перегруженных методов может быть много, и только по количеству однотипных параметров, можно воспользоваться появившейся в версии 1.5 возможностью использования методов с переменным количеством параметров . . . (троеточие). Например, наш гипотетический метод рассчитывающий среднее значение может иметь четыре, пять и большее количество параметров. Воспользовавшись в таком случае возможностью передачи переменного количества параметров, мы можем написать один метод решающий эту задачу.
public float avg( float ... numbers ) {
float sum = 0;
for( float n : numbers ) {
sum += n;
}
return( sum / numbers.length );
}
float a = avg( 2.0f, 5.45f );
float a = avg( 2.0f, 5.45f, 4.0f );
float a = avg( 2.0f, 5.45f, 4.0f, 3.4f );
Вызывать этот метод можно разными способами:
В данном примере ключевое слово this позволяет вызвать другой конструктор из данного. Подобный вызов может быть только первым оператором в конструкторе, то есть выше него не может быть других операторов. После такого вызова другие операторы допустимы.
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть