Окончательный, статический и абстрактный модификатор отсутствия доступа

программирования HTML Изучение

Модификаторы — это определенные ключевые слова, присутствующие в Java, с помощью которых мы можем вносить изменения в характеристики переменной, метода или класса и ограничивать их область действия. Язык программирования Java имеет богатый набор модификаторов. Модификаторы в Java делятся на два типа

  1. Модификаторы доступа
  2. Модификаторы отсутствия доступа

Модификаторы без доступа предоставляют JVM информацию о характеристиках класса, метода или переменной. В Java присутствует семь типов модификаторов отсутствия доступа. Они есть:

  • static
  • final
  • abstract
  • synchronized
  • volatile
  • transient
  • native

Подробнее о модификаторах без доступа в Java. В этой статье мы собираемся обсудить различия между окончательными, статическими и абстрактными модификаторами отсутствия доступа.

Окончательный модификатор отсутствия доступа

Последний модификатор отсутствия доступа применим к классам, методам и переменным. Если мы объявим метод родительского класса как final, то мы не сможем переопределить этот метод в дочернем классе, потому что его реализация является final, и если класс объявлен как final, мы не можем расширить функциональность этого класса, т.е. мы не можем создать дочерний класс для этого класса, т.е. наследование невозможно для конечных классов. Каждый метод, присутствующий в финальном классе, всегда является окончательным по умолчанию, но каждая переменная, присутствующая в финальном классе, не обязательно должна быть финальной. Основное преимущество ключевого слова final заключается в том, что мы можем обеспечить безопасность и уникальную реализацию. Но главный недостаток ключевого слова final заключается в том, что мы упускаем ключевые преимущества ООП, такие как наследование (из-за класса final),

Пример 1:

// Java Program to illustrate Final keyword
// Where No final keyword Is Used
// Importing required classes
import java.io.*;
import java.util.*;
// Class 1
// Super-class
class P {
    // Method 1
    // To declare first name
    public void firstName()
    {
        // Passing name and print it
        System.out.println("Mayank");
    }
    // Method 2
    // To declare last name
    public void surName()
    {
        // Passing name and print it
        System.out.println("Trivedi");
    }
}
// Class 2
// Sub-class
// Extending above class
class C extends P {
    // Method 1
    // Trying to override the last name
    public void surName()
    {
        // Display surname
        System.out.println("Sharma");
    }
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Display message
        System.out.println("GFG");
    }
}

Выход:

GFG

Пример 2:

// Java Program to illustrate Final keyword
// When final keyword Is Used
// Importing required classes
import java.io.*;
import java.util.*;
// Class 1
// Super-class
class P {
    // Method 1
    // To declare first name
    public void firstName()
    {
        // Passing name and print it
        System.out.println("Mayank");
    }
      
      // Method 2
    // To declare last name
    public final void surName()
    {
        // Passing name and print it
        System.out.println("Trivedi");
    }
}
// Class 2
// Sub-class
// Extending above class
class C extends P {
    // Method 1
    // Trying to override the last name
    public void surName()
    {
        // Display surname
        System.out.println("Sharma");
    }
    
      // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Display message
        System.out.println("GFG");
    }
}

Выход:

ический модификатор

Статический модификатор отсутствия доступа

Статический модификатор запрета доступа применим к методам и переменным, но не к классам. Мы можем объявить класс верхнего уровня с модификатором static, но мы можем объявить внутренний класс как статический (такие типы внутренних классов известны как статические вложенные классы). В случае переменной экземпляра для каждого объекта будет создана отдельная копия, но в случае статической переменной будет создана одна копия на уровне класса, которая будет использоваться всеми объектами этого класса.

Пример:

// Java Program to Illustrate Static Access Modifier
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
class GFG {
    // Creating a static variable and
    // initializing a custom value
    static int x = 10;
    // Creating a instance variable and
    // initializing a custom value
    int y = 20;
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of class inside main() method
        GFG t1 = new GFG();
        // Accessing and re-initializing the
        // static and instance variable
        // using t1 reference
        t1.x = 888;
        t1.y = 99;
        // Creating an object of class inside main() method
        // again
        GFG t2 = new GFG();
        // Accessing the static and instance variable using
        // t2 reference as we know that for each object
        // there is separate copy of instance variale
        // created. While same copy of static variable will
        // be shared between the objects
        // Displaying the value of static and instance
        // variable using t2 object refernce
        System.out.println(
            "Value of Static variable x = " + t2.x + "\n"
            + "Value of Instance variale y = " + t2.y);
    }
}

Выход:

рактный модификатор отсутс

Абстрактный модификатор отсутствия доступа

Абстрактный модификатор отсутствия доступа применим только к классам и методам, но не к переменным. Если мы объявляем какой-либо метод абстрактным, то этот метод должен иметь свою реализацию в дочернем классе соответствующего класса, потому что абстрактные методы никогда не говорят о реализации. Если какой-либо модификатор говорит о реализации, то он образует недопустимую комбинацию с абстрактным модификатором. Аналогичным образом, если для любого java-класса нам не разрешено создавать объект (из-за частичной реализации), то такой тип класса мы должны объявить с модификатором abstract.

Пример:

// Java program to illustrate Abstract Access Modifier
 
// Importing the required packages
import java.io.*;
import java.util.*;
 
// Class 1
// Helper abstract class
abstract class Vechile {
 
    // Declaring an abstract method getNumberOfWheel
    abstract public int getNumberOfWheel();
}
 
// Class 2
// Helper class extending above abstract class
class Bus extends Vechile {
 
    // Giving the implementation
    // to the  parent abstract method
    public int getNumberOfWheel() { return 7; }
}
 
// Class 3
// Helper class extending above abstract class
class Auto extends Vechile {
 
    // Giving the implementation
    // to the  parent abstract method
    public int getNumberOfWheel() { return 3; }
}
 
// Class 4
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating Bus object
        Bus b = new Bus();
 
        // Creating Auto object
        Auto a = new Auto();
 
        // Now getting and displaying
        // the number of wheels
        // for Bus by calling the
        // getNumberOfWheel method
        System.out.println("Number of wheels in bus is"
                           + " " + b.getNumberOfWheel());
 
        // Now getting and displaying
        // the number of wheels
        // for Auto by calling the
        // getNumberOfWheel method
        System.out.println("Number of wheels in Auto is"
                           + " " + a.getNumberOfWheel());
    }
}

Выход:

лица разл

Таблица различий

     Окончательный модификатор отсутствия доступа                           Статический модификатор отсутствия доступа Абстрактный модификатор отсутствия доступа
Этот модификатор применим как к внешним, так и к внутренним классам. Этот модификатор неприменим к внешним классам. Этот модификатор применим как к внешним, так и к внутренним классам.
Этот модификатор не применим к интерфейсам Этот модификатор неприменим к интерфейсам. Этот модификатор применим к интерфейсам.
Этот модификатор является единственным модификатором, применимым к локальным переменным. Этот модификатор неприменим к локальным переменным. Этот модификатор неприменим к локальным переменным.
Метод Final не может быть унаследован. Статические методы могут обращаться только к статическим членам класса и могут вызываться только другими статическими методами. Абстрактный метод может быть унаследован.
Читайте также:  7 идей проектов на блокчейне для профессионалов
Оцените статью
bestprogrammer.ru
Добавить комментарий