<<Предыдущий урок   Список уроков   Следующий урок>>

Объекты

Почти весь код, написанный на языке Java — это классы и объекты, т.к. java — объектно ориентированный язык. Java-объекты хранят свое состояние в переменных, эти  переменные еще называют полями или членами экземпляра класса. Больше об объектах читайте по ссылке: Создание собственных классов в Java (продолжение), класс Object

Давайте начнем с примера:

Этот класс определяет точку с координатами X и Y.

Для того, чтобы создать экземпляр этого класса, мы должны использовать ключевое слово new.

При этом используется так называемый конструктор по умолчанию (или конструктор без параметров) — это специальный метод класса, мы его не определяли явно, но даже если его не определить, он создаётся автоматически, выполняется при создании каждого нового объекта и присваивает первоначальные значения его свойствам (инициализирует их).

От методов в java конструктор отличается тем, что имеет то же самое имя, что и класс, в котором он определен, а также не имеет типа возвращаемого значения. Конструктор в java возвращает новый объект — экземпляр родительского класса). Больше о конструкторах читайте по ссылке: Создание собственных классов в Java: свойства, методы, конструкторы

Мы можем определить наш собственный конструктор. Поскольку методы можно перегружать, а конструктор является методом, то с помощью перегрузки можно создать дополнительные варианты конструкторов. Например, удобно иметь конструктор, который позволит при создании объекта Point явно указывать его координаты:

Это означает, что мы не можем больше использовать конструктор по умолчанию new Point(). Теперь мы можем пользоваться только перегруженным конструктором  с указанием начальных значений new Point(4, 1).

Мы можете определить более чем один конструктор, так что объект класса Point может быть создан несколькими способами. Давайте создадим еще один перегруженный конструктор:

Обратите внимание на ключевое слово this. Мы можем использовать его внутри конструктора для вызова другого конструктора (для того, чтобы избежать дублирования кода).

Мы также используем ключевое слово this в качестве ссылки на текущий объект.

После того, как мы определили объект р мы можем получить доступ к X и Y.

Методы

Теперь мы можем определить методы класса Point.

Public и Private

На прошлом уроке мы уже рассматривали модификаторы доступа. Ключевое слово private перед переменной или методом  означает, что только сам класс может получить доступ к переменной или методу, а когда мы используем public это значит, что любой объект может получить к нему доступ. Конструкторы обычно определяют как public, переменные определяют как private, а методы разделяются, некоторые public, а некоторые private, в зависимости от задач. Подробнее о модификаторах доступа читайте по ссылке: Создание собственных классов в Java (продолжение), инкапсуляция, полиморфизм, модификаторы доступа

Упражнение

Напишите новый метод класса Point с названием scale, который сделает точку наполовину ближе к началу координат (0,0). Например, точка с координатами (8, 4) после выполнения метода  scale будет иметь координаты (4, 2).


<<Предыдущий урок   Список уроков   Следующий урок>>

#7. Вводный курс по JAVA. Объекты, конструкторы обновлено: Март 12, 2016 автором: admin

  1. тип того вышло, но у меня работает:
    public void scale (){
    if (x != 0 && y != 0){
    x = x/2;
    y = y/2;
    /*если ни одна из координат не 0 */
    }
    else if ( x == 0 ){
    y = y / 2;
    /* если х = 0, исключение деления на 0*/
    }
    else if ( y == 0){
    x = x / 2;
    /* если у = 0, исключение деления на 0*/
    }
    }

    • Мне кажется, вот так проще:
      ——————————-
      файл Point.java:

      public class Point{
      private int x;
      private int y;

      public Point(int x,int y){
      this.x = x;
      this.y = y;
      }

      public void printPoint(){
      System.out.println(«(» + x + «;» + y + «)»);
      }

      public static Point scale(Point nova){
      return new Point (nova.x / 2, nova.y / 2);
      }
      }
      ————————————————
      файл Main.java:

      public class Main{
      public static void main(String[] args){
      Point Coord = new Point(8, 4);
      //Coord.x = 8;
      //Coord.y = 4;
      Coord.printPoint();

      Coord = Point.scale(Coord);
      Coord.printPoint();
      }
      }
      ———————————————-
      Скомпилировал в командной строке и выполнил Main.java.
      Всё нормально выполняется.

  2. Ваши уроки крайне не подробны и вызывают лишь недопонимание. Вы не объясняете то, что написано в вашем коде, вы просто это проговаривайте. Допустим про «new» вы не сказали совершенно ничего, зачем это нужно и для чего. Я советую вам ваши уроки переснять и большую часть перенести на текст. Люди, смотрящие эти уроки никогда не купят у вас ваши платные курсы.

  3. Не понял реализацию метода

    Point center(Point other) {
    // Возвращает центр между этой и другой точками
    // Заметьте, мы используем целое число, поэтому не получим точное значение
    return new Point((x + other.x) / 2, (y + other.y) / 2);
    }

    что за «другая» точка, как изначально задать её координаты и как его проверить результат?

  4. Victor on 19.02.2016

    Не понял реализацию метода

    Point center(Point other) {

    // Возвращает центр между этой и другой точками

    // Заметьте, мы используем целое число, поэтому не получим точное значение

    return new Point((x + other.x) / 2, (y + other.y) / 2);

    }

    что за «другая» точка, как изначально задать её координаты и как его проверить результат?

    если попытаться написать все это на практике то станет понятнее. но тоже поломал голову оказывается все по хитрому (для новичка): при вызове метода center мы будем писать чтото вроде point1.center(point2) вот и две точки. результатом будет третья.

  5. При всём уважении, делаете доброе дело, но всё есть моменты не совсем положительные… К выше написанномуБ о том что вы многие моменты не объяснете а просто проговоариваете или молча пиште, хотелось бы что б вы комментировали сложные места или вообще не известные и показывали результат (выведенный итог) который у вас получился и результат (итоговый) заданий. Спасибо

  6. public class Point {
    int x; //Начальная координата Х (если начальная координата не (0;0);
    int y; //Начальная координата У (если начальная координата не (0;0);
    int x1; //Конечная координата Х;
    int y1; //Конечная координата У;

    public String Scale(){
    String s = «;»;
    String Scale = ((x1 + x)/2+s+(y1 + y)/2);
    return Scale;
    }
    public void nachaloScale (int x, int y) {
    this.x = x;
    this.y = y;
    }
    public void konesScale (int x1, int y1){
    this.x1 = x1;
    this.y1 = y1;
    }
    }
    ——————————-
    public class Main {
    public static void main(String[] args) {
    Point p = new Point();
    p.nachaloScale(0,0);
    p.konesScale (8,4);
    String KOO = p.Scale();
    System.out.println(«Seredina: » + KOO);
    }
    }

  7. //Point.java

    public class Point {

    private double x;
    private double y;

    public Point(double x, double y) {
    this.x = x;
    this.y = y;
    }

    public void printCoordinates() {
    //метод выводит координаты точки
    System.out.println((this.x) + » » + (this.y));
    }

    public void scale() {
    //метод уменьшает каждую координату точки в два раза
    this.x = this.x / 2;
    this.y = this.y / 2;
    }
    }

    //Main.java

    public class Main {

    public static void main(String[] args) {

    Point firstPoint = new Point(24.2, 48.6);
    //строка создаёт новую точку firstPoint

    firstPoint.scale();
    //делаем точку наполовину ближе к началу координат»

    firstPoint.printCoordinates();
    //выводим результат

    }
    }

  8. Я сделал вот так:
    public class Student{
    public String name, soname, family;
    public String printFullName(){
    return "Фамилия Имя Отчество: " + (family + " " + name +" "+ soname);
    }
    }

    public class Main {
    public static void main(String[] args) {
    Student a = new Student();
    a.name = "Имя";
    a.soname = "Отчество";
    a.family = "Фамилия";
    System.out.println(a.printFullName());
    }
    }

Добавить комментарий