Скачать презентацию Модификаторы 3 1 Модификаторы доступа o Скачать презентацию Модификаторы 3 1 Модификаторы доступа o

J_Лекция 3 Модификаторы доступа1.ppt

  • Количество слайдов: 26

Модификаторы № 3 Модификаторы № 3

1. Модификаторы доступа o o Доступен всем - public для производных классов protected для 1. Модификаторы доступа o o Доступен всем - public для производных классов protected для классов из одного пакета friendly для данного класса private Применение модификаторов o o o Для классов Для методов Для переменных

2. Использование модификаторов доступа Для класса class Parser{…}; public class Position{…}; Для переменной private 2. Использование модификаторов доступа Для класса class Parser{…}; public class Position{…}; Для переменной private int i; Graphics off. Screen; Для метода protected double get. Square(){…}; private Complex get. Complex(){…};

3. Модификаторы доступа для класса Класс не может иметь модификатор private 1. private class 3. Модификаторы доступа для класса Класс не может иметь модификатор private 1. private class Flower {//Illegal modifier for class 2. int color; 3. int size; 4. } 5. public class Rose extends Flower{ 6. String flavoured; 7. } Класс не может иметь модификатор protected 1. protected class Flower {//Illegal modifier for class 2. int color; 3. int size; 4. }

4. Модификаторы доступа для данных сlass Complex{ private double real, imag; public Complex(double r, 4. Модификаторы доступа для данных сlass Complex{ private double real, imag; public Complex(double r, double i) {real=r; imag=i; } public Complex add(Complex c) {return new Complex(real+c. real, imag+c. imag); } Класс, использующий комплексные числа: class Client{ void use. Them(){ Complex c 1=new Complex(1, 2); Complex c 2=new Complex(3, 4); Complex c 3=c 1. add(c 2); Double d=c 3. real; //illegal } Подкласс от класса Complex class Sub. Complex extends Complex{ public Sub. Complex(double r, double i){ real=r; imaginary=i; //переменные не доступны } }

5. Модификаторы private & friendly & protected & public o o o friendly – 5. Модификаторы private & friendly & protected & public o o o friendly – не ключевое слово, имя доступа по умолчанию private – доступны только членам класса friendly – доступны классам из того же пакета protected - доступны из производных классов и классам из того же пакета public - доступны всем

6. Модификаторы доступа для методов friendly & protected package sportinggoods; class Ski{ void apply. 6. Модификаторы доступа для методов friendly & protected package sportinggoods; class Ski{ void apply. Wax(){. . } } package sportinggoods; class Down. Hill. Ski extends Ski{ void tune_up(){apply. Wax(); } } package different. Package; class Ski{ protected void apply. Wax(){. . }//Из другого пакета можно использовать только protected метод }

7. Доступность методов при перегрузке o private методы могут быть перегружены в private friendly, 7. Доступность методов при перегрузке o private методы могут быть перегружены в private friendly, protected, public методах; o friendly методы могут быть protected, public методах; o protected методы могут быть перегружены в protected, public методах; Перегрузка методов private friendly перегружены protected Перегруженные методы не могут больше защищены, чем исходные методы в friendly public

8. Спецификатор final применяется по отношению к классам, o методам o данным final class 8. Спецификатор final применяется по отношению к классам, o методам o данным final class - класс не может быть базовым. final method() - метод нельзя перегружать. final data - данные являются константами. o Подкласс от финального класса final java. lang. Math Попытка создать подкласс от математического класса не является успешной: class Sub. Math extends java. lang. Math{…} /illegal

9. Спецификатор final для переменных Спецификатор final применяется для переменных и ссылок. Ссылка на 9. Спецификатор final для переменных Спецификатор final применяется для переменных и ссылок. Ссылка на объект объявлена как final class Walnut{ int weight; walnut(int w){weight=w; }; } class Tester{ final Walnut w 1 = new walnut(1500); void test(){ w 1=new Walnut(1400); //illegal попытка изменить ссылку w 1. weight=1800; //OK попытка изменить поле} }

10. Спецификатор final для методов Метод, объявленный как final не может быть перегружен 1. 10. Спецификатор final для методов Метод, объявленный как final не может быть перегружен 1. public class Mammal { 2. protected int x, y; 3. public Mammal(int x, int y) { 4. this. x=x; this. y=y; } 5. final void get. Around() {x++; y++; } 6. } 7. class Dolphin extends Mammal{ 8. int z; 9. public Dolphin(int x, int y, int z) { 10. super(x, y); 11. this. z=z; } 12. void get. Around() {x++; y++; z++; } 13. }

11. Спецификатор abstract применяется по отношению o к классам o к методам. o o 11. Спецификатор abstract применяется по отношению o к классам o к методам. o o Абстрактный класс не может создавать объектов. Абстрактный класс имеет один или более абстрактных методов. Абстрактный класс может наследовать абстрактные методы из базового класса. Абстрактный класс может наследовать абстрактные методы от интерфейса, но не определять всех методов.

12. Абстрактный класс наследует методы от интерфейса 1. public interface Function { 2. void 12. Абстрактный класс наследует методы от интерфейса 1. public interface Function { 2. void work(); } 3. abstract public class Person implements Function{ 4. public Person() {…}; 5. } Абстрактный класс имеет собственный абстрактный метод 1. abstract public class Animal { 2. abstract void travel(); } 3. public class Berd extends Animal{ 4. void travel(){…}; } 5. public class Fish extends Animal{ 6. void travel(){…}; } 7. public class Snake extends Animal { 8. void travel(){…}; }

13. Абстрактные методы не имеют тела. abstract public class Animal { abstract void travel(); 13. Абстрактные методы не имеют тела. abstract public class Animal { abstract void travel(); } public class Berd extends Animal{ void travel(){…}; } сlass Animal {abstract void travel()…} class Berd class Fish class Snake {void travel()…}

14. Спецификатор static Спецификатор применяется по отношению o к блокам кода o к методам 14. Спецификатор static Спецификатор применяется по отношению o к блокам кода o к методам o к переменным Статические переменные Статическая переменная одна для всех объектов класса class Astatic{ static int x=0; Astatic(){x++; } }

15. Статические переменные Обращение к статической переменной выполняется через ссылку на объект Astatic a 15. Статические переменные Обращение к статической переменной выполняется через ссылку на объект Astatic a 1=new Astatic(); Astatic a 2=new Astatic(); a 1. x = 100; a 2. x = 200; var=a 1. x; //200 Обращение к статической переменной через имя класса. Astatic a 1=new Astatic(); Astatic a 2=new Astatic(); Astatic. x = 100; Astatic. x = 200; var = Astatic. x; //200

16. Статические методы могут свободно обращаться к статическим переменным и вызывать другие статические методы. 16. Статические методы могут свободно обращаться к статическим переменным и вызывать другие статические методы. Статические методы НЕ могут обращаться к нестатическим переменным и вызывать не статические методы. class Some. Class{ static int i=38; int j=1; public static void main(String args[]) {i+=100; j*=5; // error j не статическая переменная }

17. Статический метод main() Статические методы не имеют ссылку this на объект. Для доступа 17. Статический метод main() Статические методы не имеют ссылку this на объект. Для доступа к нестатическим компонентам нужно создать объект их содержащий. import java. awt. *; public class My. Frame extends Frame{ My. Frame(){ set. Size(300, 300); } } public static void main(String args[]){ My. Frame the. Frame=new My. Frame(); //создание объекта the. Frame. set. Visible(true); }

18. Перегрузка статического метода Статический метод статический не может быть перегружен как не class 18. Перегрузка статического метода Статический метод статический не может быть перегружен как не class Cattle{ static void food(){…}; } class Sheep extends Cattle{ void food(){…}; //error This instance method cannot override the static method from Cattle }

19. Cтатический инициализатор Допускается иметь статический код вне метода public class Static. Demo{ static 19. Cтатический инициализатор Допускается иметь статический код вне метода public class Static. Demo{ static int i=5; static{ System. out. println(“Static code: i=”+i++); } public static void main (String args[]){ System. out. println(“Static code: i=”+i++); } }

20. Спецификатор native-применяется только к методам. Тело native-метода находится вне JVM. Native-методы расположены в 20. Спецификатор native-применяется только к методам. Тело native-метода находится вне JVM. Native-методы расположены в библиотеке на целевой машине. Требуется загрузка библиотеки native-методов class Native. Example{ native void do. Something(int i); static{ System. load. Library(“My. Native. Library”); } } Вызов native-метода native. Example natex= new Native. Example(); natex. do. Something(5);

21. Спецификатор transient (временный) применяется только к переменным. Transient-переменные не запоминаются как часть объекта. 21. Спецификатор transient (временный) применяется только к переменным. Transient-переменные не запоминаются как часть объекта. class Wealthy. Customer extends Customer implements Serializable{ private float name; private string access. Code; } Пусть файл должен быть запомнен или передан в Интернет. Вместе с объектом не следует запоминать пароль access. Code. сlass Wealthy. Customer extends Customer implements Serializable{ private float name; private transient string access. Code; }

22. Спецификатор synchronized и volatile o o Спецификатор synchronized применяется для управления доступом к 22. Спецификатор synchronized и volatile o o Спецификатор synchronized применяется для управления доступом к критической секции кода в многопоточной программе. Спецификатор volatile применяется только к переменным. Такие переменные могут быть изменены только асинхронно. Используются только в многопроцессорных системах.

23. Применение модификаторов Модификатор Класс Переменная Метод Блок вне метода public Yes Yes No 23. Применение модификаторов Модификатор Класс Переменная Метод Блок вне метода public Yes Yes No protected No Yes No (friendly) Yes Yes No private No Yes No final Yes Yes No abstract Yes No static No Yes Yes native No Yes No transient No Yes No No sychronized No No yes No

24. Выводы o o o В java-программах используют общие модификаторы доступа public, protected, private, 24. Выводы o o o В java-программах используют общие модификаторы доступа public, protected, private, которые применяются к классам, методам и переменным. Модификатор friendly – это имя доступа к классу, переменной или методу по умолчанию, когда не указаны другие модификаторы. . Слово friendly не является ключевым словом java. Спецификатор final применяется к классам, методам и данным. Класс, объявленный как final не может быть базовым для других классов, final-метод нельзя перегружать. Данные, объявленные как final, являются константами, их значения нельзя изменять в программе, final-ссылка на объект не может быть изменена.

25. Выводы o o o Спецификатор abstract применяется к классам и методам. Абстрактный класс 25. Выводы o o o Спецификатор abstract применяется к классам и методам. Абстрактный класс имеет один или более абстрактных методов, которые он может наследовать из базового класса или интерфейса, не определяя их. Спецификатор static применяется к классам, методам и переменным. Статический метод может быть выполнен без создания объектов класса, в котором он объявлен. Статическая переменная является общей для всех объектов класса. Модификатор native применяется только к методам. Код native методов может быть написан на языке C или C++ и откомпилирован для данного типа машины. Тело метода выполняется вне JVM. Спецификатор transient (временный) применяется только к переменным. Transient-переменные не запоминаются и не передаются по сети как часть объекта класса, в котором они объявлены. Спецификатор synchronized применяется для управления доступом к критической секции кода в многопоточных программах.