Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa protected và default access specifier trong Java?


Protected access specifier hiển thị trong cùng package và cũng hiển thị trong subclass trong khi Default là một package level access specifier và nó có thể hiển thị trong cùng package.

Protected Access Specifier

  • Protected hoạt động như public trong cùng package và như private bên ngoài package.
  • Protected cũng hoạt động như public bên ngoài package chỉ đối với các đối tượng subclass.
  • Protected fields hoặc methods không thể dùng cho classes và Interfaces.
  • Các fields, methods, và constructors được khai báo là protected trong một superclass chỉ có thể được truy cập bởi các subclass trong các package khác.
  • Các class trong cùng package cũng có thể truy cập protected fields, methods và constructors, ngay cả khi chúng không phải là subclass của class chứa thành viên protected.

Ví dụ

public class ProtectedTest { 
    // variables that are protected 
    protected int age = 30; 
    protected String name = "Adithya"; 
    /** 
     * This method is declared as protected. 
     */ 
    protected String getInfo() { 
        return name +" is "+ age +" years old."; 
    } 
    public static void main(String[] args) { 
        System.out.println(new ProtectedTest().getInfo()); 
    } 
}

Kết quả

Adithya is 30 years old. 


Default Access Specifier

  • Bất kỳ thành viên nào của một class được khai báo không có access specifier thì được coi là Default.
  • Default sẽ hoạt động như public trong cùng package và như private bên ngoài package.
  • Các thành viên Default của bất kỳ class nào có sẵn cho bất cứ thứ gì trong cùng package và không thể có sẵn bên ngoài package dưới bất kỳ điều kiện nào.
  • Default giới hạn quyền truy cập chỉ ở package level, ngay cả sau khi extends class có thành viên dữ liệu default, chúng ta không thể truy cập.

Ví dụ

public class DefaultTest { 
    // variables that have no access modifier 
    int age = 25; 
    String name = "Jai"; 
    /** 
     * This method is declared with default access specifier 
     */ 
    String getInfo() { 
        return name +" is "+ age +" years old."; 
    } 
    public static void main(String[] args) { 
        System.out.println(new DefaultTest().getInfo()); 
    } 
}

Kết quả

Jai is 25 years old.