JavaRush/Java Π±Π»ΠΎΠ³/Random/ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #244. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Π² Java. 11 вопросов...

ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #244. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Π² Java. 11 вопросов Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΡ€ΠΎ enum Π² Java

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ Random
участников

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Π² Java

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Medium Π”Π°Π½Π½ΠΎΠ΅ руководство ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа Π² Java Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΈΡ… согласованиС с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. ΠšΠΎΡ„Π΅-Π±Ρ€Π΅ΠΉΠΊ #244. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Π² Java. 11 вопросов Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΡ€ΠΎ enum Π² Java - 1Π’ Java ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа (Access Modifiers) ΠΈΠ³Ρ€Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП), обСспСчивая ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, сокрытиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² прилоТСниях. Π’ Java Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа: private, public, default ΠΈ protected. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ элСмСнтов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Java.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Private

Когда элСмСнт ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ private, ΠΎΠ½ становится доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ объявлСн. Никакой Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс, Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ подклассах, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этому элСмСнту. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ private часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, прСдотвращая прямой доступ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π½Π΅ класса. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getter ΠΈ setter, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ доступ ΠΊ private-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.
public class BankAccount {
   private double balance;

   public BankAccount(double initialBalance) {
     this.balance = initialBalance;
   }

   // ΠœΠ΅Ρ‚ΠΎΠ΄ getter для доступа ΠΊ Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ балансу
   public double getBalance() {
     return balance;
   }

   // ΠœΠ΅Ρ‚ΠΎΠ΄ для Π²Ρ‹Π²ΠΎΠ΄Π° срСдств
   public void withdraw(double amount) {
     if (amount > 0 && amount <= balance) {
       balance -= amount;
     }
   }
}
Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСнная balance ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ private, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ доступ ΠΊ Π½Π΅ΠΉ ΠΈ Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² getBalance() ΠΈ remove(), Ρ‡Ρ‚ΠΎ обСспСчиваСт Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ.

Public

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ public, доступны ΠΈΠ· любой части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, нСзависимо ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ»ΠΈ класса. Они ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ°ΠΌΡƒΡŽ ΡˆΠΈΡ€ΠΎΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ доступны Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны для всСх частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
public class MathUtils {
   public static final double PI = 3.14159;

   public static int add(int a, int b) {
     return a + b;
   }
}
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ константа PI ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ add() ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ public, Ρ‡Ρ‚ΠΎ позволяСт Π΄Ρ€ΡƒΠ³ΠΈΠΌ классам ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

Default

Если ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ явно, Ρ‚ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (default). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ default, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ доступСн Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π½ΠΎ Π½Π΅ ΠΈΠ· классов Π²Π½Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.
package com.example.calculator;
  class BasicCalculator {
     int add(int a, int b) {
       return a + b;
     }
  }
Π’ этом сцСнарии ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ add() прСдоставляСтся доступ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (default), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, Π½ΠΎ Π½Π΅ ΠΈΠ·Π²Π½Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Protected

Доступ ΠΊ элСмСнтам с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ protected Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ подклассов, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ находятся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. Он ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны для подклассов, Π½ΠΎ ΠΏΡ€ΠΈ этом ограничиваСтся доступ ΠΈΠ· нСсвязанных классов.
package com.example.animals;

public class Animal {
    protected String name;

    protected void makeSound() {
        System.out.println("Animal makes a sound");
    }
}
Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСнная name ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ makeSound() ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ protected, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… доступными Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ подклассов класса Animal, Π΄Π°ΠΆΠ΅ Ссли подклассы находятся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅.

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ default ΠΈ protected

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ доступа protected ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ доступа default. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ это, снова Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ класс с ΠΈΠΌΠ΅Π½Π΅ΠΌ Bird. Класс Bird Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс Animal ΠΈ остаСтся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ (com.example.bird), Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ класса Animal. Π― всС Π΅Ρ‰Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ makeSound() класса Animal, ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ подклассы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ protected-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚.
package com.example.bird;

import com.example.animals.Animal;

public class Bird extends Animal {

  public void getBirdSound(){
    this.makeSound();
  }
}
Π’Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ классу default ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ класса BasicCalculator ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π― создаю Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ com.example.averagecalculator ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽ Π² Π½Π΅Π³ΠΎ класс AverageCalculator. Когда я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса BasicCalculator, компилятор ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. β€˜com.example.calculator.BasicCalculator’ is not public in β€˜com.example.calculator’. Cannot be accessed from outside package.
package com.example.averagecalculator;

import com.example.calculator.BasicCalculator;

  public class AverageCalculator {

     public int calculateAverage(int a, int b){
       BasicCalculator basicCalculator = new BasicCalculator();
     }
  }
Π― мСняю ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ BasicCalculator Π½Π° public, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ класс доступСн ΠΎΡ‚ΠΎΠ²ΡΡŽΠ΄Ρƒ. Π― Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ add() класса BasicCalculator. Однако ΠΌΠ΅Ρ‚ΠΎΠ΄ add() ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ default. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΠΏΠΎΠ»ΡƒΡ‡Ρƒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° add() класса BasicCalculator.
package com.example.averagecalculator;

import com.example.calculator.BasicCalculator;

  public class AverageCalculator {

     public int calculateAverage(int a, int b){
       BasicCalculator basicCalculator = new BasicCalculator();
       return basicCalculator.add(a,b)/2;
     }
  }

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа Π² Java β€” это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ аспСкт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ПониманиС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ доступа private, public, default ΠΈ protected Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для создания Ρ…ΠΎΡ€ΠΎΡˆΠΎ структурированных, бСзопасных ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π² сопровоТдСнии Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

11 вопросов Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΡ€ΠΎ enum Π² Java

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Medium Π’Π°ΡˆΠ΅ΠΌΡƒ вниманию прСдлагаСтся ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· ΠΎΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных вопросов ΠΏΡ€ΠΎ enum (пСрСчислСния) Π² Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ Π²Π°ΠΌ Π½Π° тСхничСском ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ.

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ enum (пСрСчислСниС) Π² Java ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ?

Enum (пСрСчислСниС) Π² Java β€” это особый Ρ‚ΠΈΠΏ с фиксированным Π½Π°Π±ΠΎΡ€ΠΎΠΌ постоянных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ enum, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово enum, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π΅Π³ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ список констант Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках. НапримСр:
enum Season {
  SPRING, SUMMER, AUTUMN, WINTER;
}

2. ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства использования enum ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с константами

НСкоторыС прСимущСства использования enum Π½Π°Π΄ константами:
  • Enum ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, прСдотвращая присвоСниС нСдопустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ° пСрСчислСния.
  • Enum ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΠ»ΠΈ Π²Π½Π΅ класса Π² зависимости ΠΎΡ‚ ΠΈΡ… области дСйствия ΠΈ видимости.
  • Enum ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… switch, Π½Π΅ трСбуя явного привСдСния ΠΈΠ»ΠΈ прСобразования.
  • Enum Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ класс ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ классом, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ наслСдования.
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ enum нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚Ρ€Π°Ρ‚Ρƒ памяти.
  • Enum ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, конструкторы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ классы.

3. Как Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ доступ ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ константы enum?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ константС enum, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ dot, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ (.) послС ΠΈΠΌΠ΅Π½ΠΈ enum. НапримСр:
Season season = Season.SPRING;
Для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх констант enum ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ values(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив всСх констант enum. НапримСр:
for (Season s : Season.values()) {
  System.out.println(s);
}

4. Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π΅ константы enum с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ==?

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π΅ константы enum с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ==, Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
if (season == Season.SPRING) {
  System.out.println("It's spring!");
}
Π­Ρ‚ΠΎΡ‚ способ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ каТдая константа enum являСтся одноэлСмСнтным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр Π² памяти.

5. Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля Π² enum?

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля Π² enum, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… послС списка констант ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой (;). Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ конструктор для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСскими. НапримСр:
enum Planet {
  MERCURY(3.303e+23, 2.4397e6),
  VENUS(4.869e+24, 6.0518e6),
  EARTH(5.976e+24, 6.37814e6),
  MARS(6.421e+23, 3.3972e6),
  JUPITER(1.9e+27 ,7.1492e7),
  SATURN(5.688e+26 ,6.0268e7),
  URANUS(8.686e+25 ,2.5559e7),
  NEPTUNE(1.024e+26 ,2.4746e7);

// поля
private final double mass; // Π² ΠΊΠΈΠ»ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…
private final double radius; // Π² ΠΌΠ΅Ρ‚Ρ€Π°Ρ…

// конструктор
Planet(double mass, double radius) {
    this.mass = mass;
    this.radius = radius;
}

// ΠΌΠ΅Ρ‚ΠΎΠ΄
public double getSurfaceGravity() {
    return G * mass / (radius * radius);
}
}

6. Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enum?

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch с использованиСм enum, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя enum Π² качСствС выраТСния ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случай с константой enum Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ указания Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ. НапримСр:
switch (season) {
case SPRING:
    System.out.println("Flowers bloom");
    break;
case SUMMER:
    System.out.println("Sun shines");
    break;
case AUTUMN:
    System.out.println("Leaves fall");
    break;
case WINTER:
    System.out.println("Snow falls");
    break;
default:
    System.out.println("Invalid season");
}

7. Как Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ enum с аннотациями ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ enum с аннотациями ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:
  • Аннотации ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ»ΠΈ строки Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², поэтому Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ enum Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.
  • Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив enums Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΈΡ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ({}).
  • ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ любой ссылочный Ρ‚ΠΈΠΏ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ enum.
  • Однако Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ generic-массивы с enums, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌΠΈ, Π° Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ β€” ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌΠΈ.

8. Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€ константы enum?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ordinal(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ int, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ константы enum Π² объявлСнии. НапримСр:
enum Color {
  RED, GREEN, BLUE;
}

Color c = Color.GREEN;
System.out.println(c.ordinal()); // prints 1

9. Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя константы enum?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ name(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ String, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ имя константы enum, ΠΊΠ°ΠΊ объявлСно. НапримСр:
enum Color {
  RED, GREEN, BLUE;
}

Color c = Color.BLUE;
System.out.println(c.name()); // prints BLUE

10. Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ String Π² константу enum?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ valueOf(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ String ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ константу enum с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
enum Color {
  RED, GREEN, BLUE;
}

String s = "RED";
Color c = Color.valueOf(s);
System.out.println(c); // prints RED

11. Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enum?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ enum, ΡƒΠΊΠ°Π·Π°Π² Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой (;) послС списка констант, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ константы. НапримСр:
interface Operation {
  double apply(double x, double y);
}

enum MathOperation implements Operation {
  PLUS {
    public double apply(double x, double y) { return x + y; }
  },
  MINUS {
    public double apply(double x, double y) { return x - y; }
  },
  TIMES {
    public double apply(double x, double y) { return x * y; }
  },
  DIVIDE {
    public double apply(double x, double y) { return x / y; }
  };
}
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
  • популярныС
  • Π½ΠΎΠ²Ρ‹Π΅
  • старыС
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Π£ этой страницы Π΅Ρ‰Π΅ Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ коммСнтария