java四种访问权限实例分析

yizhihongxing

Java四种访问权限实例分析

在Java中,有四种访问权限修饰符,包括public、protected、default和private。对于不同的访问权限,它们所允许的访问范围也不同,下面我们来详细讲解一下。

1. public

public是最宽松的访问权限,使用public修饰的类、变量和方法可以被任何其他类所访问,包括在不同包中的类。

示例1:

package com.example.a;
public class A {
    public int num1 = 1;
    protected int num2 = 2;
    int num3 = 3;
    private int num4 = 4;
}

在示例1中,我们在包com.example.a中定义了一个类A,并对其四个成员变量分别使用了public、protected、default和private修饰符。其中,num1是public修饰的,可以在其他包的任何类中访问到;num2是protected修饰的,可以在A类及其子类以及在同一个包中的其他类中访问到;num3是default修饰的,可以在同一个包中的其他类中访问到;num4是private修饰的,只能在A类中访问到。

示例2:

package com.example.b;
import com.example.a.A;
public class B {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.num1); // 可以访问到
        System.out.println(a.num2); // 编译报错
        System.out.println(a.num3); // 编译报错
        System.out.println(a.num4); // 编译报错
    }
}

在示例2中,我们在包com.example.b中定义了一个类B,并引入了包com.example.a中的类A。在B类的main方法中,我们创建了一个A类的对象a,通过对象a可以访问到A类中的num1成员变量,因为它是public修饰的。但是,对于其他三个成员变量,由于它们的访问权限小于public,我们无法在B类中访问到,会编译报错。

2. protected

protected修饰的成员变量和方法可以被该类本身、该类的子类和同一个包的其他类所访问。

示例3:

package com.example.a;
public class A {
    protected void test() {
        System.out.println("protected method");
    }
}

在示例3中,我们在包com.example.a中定义了一个类A,并对其test()方法使用protected修饰符。这意味着,test()方法可以被A类本身、A类的子类和同一个包中的其他类所访问到。

示例4:

package com.example.a;
public class B extends A {
    public static void main(String[] args) {
        B b = new B();
        b.test(); // 可以访问到
    }
}

在示例4中,我们定义了一个类B,继承了A类,并在B类的main方法中创建了一个B类的对象b。由于B类是A类的子类,所以它可以访问到A类中被protected修饰的test()方法。

3. default

default是不写访问权限修饰符时的默认访问权限,它允许同一个包中的其他类访问。

示例5:

package com.example.a;
class C {
    void test() {
        System.out.println("default method");
    }
}

在示例5中,我们在包com.example.a中定义了一个类C,并对其test()方法没有使用任何访问权限修饰符。这意味着,test()方法的访问权限是default,也就是可以被同一个包中的其他类所访问到。

示例6:

package com.example.b;
import com.example.a.C;
public class D {
    public static void main(String[] args) {
        C c = new C();
        c.test(); // 可以访问到
    }
}

在示例6中,我们在包com.example.b中定义了一个类D,并引入了包com.example.a中的类C。在D类的main方法中,我们创建了一个C类的对象c,通过对象c可以访问到C类中的test()方法,因为它们在同一个包中。

4. private

private是访问权限最小的修饰符,使用private修饰的成员变量和方法只能被该类本身所访问,其他类无法访问。

示例7:

package com.example.a;
public class A {
    private void test() {
        System.out.println("private method");
    }
}

在示例7中,我们在包com.example.a中定义了一个类A,并对其test()方法使用private修饰符。这意味着,test()方法只能被A类本身所访问。

示例8:

package com.example.b;
import com.example.a.A;
public class B {
    public static void main(String[] args) {
        A a = new A();
        a.test(); // 编译报错
    }
}

在示例8中,我们在包com.example.b中定义了一个类B,并引入了包com.example.a中的类A。在B类的main方法中,我们创建了一个A类的对象a,但是无法访问到A类中被private修饰的test()方法,会编译报错。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java四种访问权限实例分析 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 解析C++类内存分布

    解析 C++ 类内存分布,需要了解以下几个概念: 对象的内存分布 成员变量的内存分布 内存对齐原则 对象的内存分布 一个 C++ 对象在内存中的分布包含三个部分: 对象头 成员变量 对象尾(可选) 对象头包含一些元信息,例如虚表指针等内容。成员变量是对象的核心数据,占用了对象内存的大部分空间。对象尾是一些特殊情况下将会占用的空间,例如空类或虚继承。 成员变量…

    other 2023年6月27日
    00
  • Golang语言的多种变量声明方式与使用场景详解

    Golang语言的多种变量声明方式与使用场景详解 在Golang中,我们可以使用多种方式来声明和使用变量。这些不同的方式适用于不同的场景,可以根据需求选择最合适的方式来声明变量。 1. var关键字声明变量 使用var关键字可以声明一个或多个变量。这种方式适用于需要在函数内部或全局范围内声明变量的情况。 func main() { var name stri…

    other 2023年7月29日
    00
  • JS中构造函数的基本特性与优缺点

    JavaScript中的构造函数是用于创建对象的函数。在JavaScript中,你可以通过两种方式创建对象: 字面量创建对象,例如: let obj = { name: ‘John’, age: 25, greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} yea…

    other 2023年6月26日
    00
  • iml文件

    以下是详细讲解“iml文件的完整攻略”的标准Markdown格式文本: iml文件的完整攻略 iml文件是IntelliJ IDEA项目的模块文件,包含了模块的配置信息。本文将介绍iml文件的基本概念、使用方法和两个示例说明。 1. iml文件基本概念 iml文件是IntelliJ IDEA项目的模块文件,包含了模块的配置信息。iml文件通常包含以下信息: …

    other 2023年5月10日
    00
  • android-什么时候调用onsizechanged()?

    以下是关于“android-什么时候调用onsizechanged()?”的完整攻略: onSizeChanged()方法 onSizeChanged()是Android View类中的一个方法,用于在View的大小发生变化时被调用。该方法的定义下: protected void onSizeChanged(int w, int h, int oldw, i…

    other 2023年5月9日
    00
  • nodejs安装失败

    Node.js安装失败的完整攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以在服务器端运行JavaScript代码。在安装Node.js时,有时会遇到安装失败的情况。本文将提供一些解决Node.js安装失败的方法和技巧。 1. 检查网络连接 在安装Node.js之前,首先要确保网络连接正常。如果网络连接不稳定或者速度过…

    other 2023年5月9日
    00
  • 详解iframe与frame的区别

    详解iframe与frame的区别 概述 在网页开发中,iframe和frame都是用于在一个网页中嵌入另一个网页的标签。它们的作用是实现网页的分割和嵌套,但在实现方式和功能上有一些区别。 iframe iframe是HTML中的一个标签,用于在当前网页中嵌入另一个网页。它的使用方式如下: <iframe src=\"https://www.…

    other 2023年7月28日
    00
  • 一文详解Javascript内存机制与垃圾回收

    一文详解Javascript内存机制与垃圾回收 1. 引言 Javascript是一种高级编程语言,它使用动态内存分配来管理变量和对象。了解Javascript的内存机制和垃圾回收是编写高效代码的关键。本文将详细介绍Javascript的内存机制和垃圾回收的工作原理,并提供示例说明。 2. 内存机制 Javascript使用堆和栈来管理内存。栈用于存储基本类…

    other 2023年8月2日
    00
合作推广
合作推广
分享本页
返回顶部