6.5--- 每天一点点---Java基础之访问修饰符的区别(总复习+深入版)---详细+举例(小白也能看懂)

Java中有四种访问修饰符,它们分别是public、private、protected和默认(即不加任何修饰符)。这些修饰符可以用来控制类、变量和方法的可见性和访问权限。

1.public修饰符表示该类、变量或方法可以被任何其他类访问。在同一个包内或者不同的包内都可以使用。

2.private修饰符表示该类、变量或方法只能被当前类中的其他方法所访问,其他类无法直接访问。

3.protected修饰符表示该类、变量或方法可以被同一个包内的其他类以及不同包中的子类所访问。

4.默认(即不加任何修饰符)表示该类、变量或方法只能被同一个包内的其他类所访问,而不能被不同包中的其他类所访问。

让我举几个例子来说明这些访问修饰符的区别。

假设我们有一个类叫做Person,它有一个成员变量叫做name和一个方法叫做speak()。

1.public修饰符:如果我们在Person类中使用public修饰符来声明name和speak()方法,那么其他任何类都可以访问它们。例如:

public class Person {
    public String name;
    
    public void speak() {
        System.out.println("Hello, my name is " + name);
    }
}

现在,在其他任何类中,我们都可以直接访问Person对象的name变量和speak()方法:

Person p = new Person();
p.name = "John";
p.speak(); // 输出: Hello, my name is John

2.private修饰符:如果我们在Person类中使用private修饰符来声明name和speak()方法,那么只有Person类内部的其他方法才能够访问它们。例如:

public class Person {
    private String name;
    
    private void speak() {
        System.out.println("Hello, my name is " + name);
    }
}

现在,在其他任何类中,我们无法直接访问Person对象的name变量和speak()方法:

Person p = new Person();
p.name = "John"; // 编译错误!无法访问私有变量
p.speak(); // 编译错误!无法访问私有方法

3.protected修饰符:如果我们在Person类中使用protected修饰符来声明name和speak()方法,那么同一包内的其他类以及不同包中的子类都可以访问它们。例如:

package com.example;

public class Person {
    protected String name;
    
    protected void speak() {
        System.out.println("Hello, my name is " + name);
    }
}

package com.example.sub;

import com.example.Person;

public class Student extends Person {
    public void introduce() {
        System.out.println("I am a student and my name is " + this.name);
        this.speak();
    }
}

现在,在com.example.sub包下的Student类中,我们可以直接访问从父类继承而来的name变量和speak()方法:

Student s = new Student();
s.name = "Tom";
s.introduce(); // 输出: I am a student and my name is Tom; Hello, my name is Tom

4.默认(即不加任何修饰符):如果我们在Person类中不加任何修饰符来声明name和speak()方法,则只有同一包内的其他类才能够访问它们。例如:

package com.example;

class Person {
    String name;
    
    void speak() {
        System.out.println("Hello, my name is " + name);
    }
}

package com.example.sub;

import com.example.Person;

public class Student {
    public void introduce(Person p) {
        p.name = "Lucy";
        p.speak();
    }
}

现在,在com.example.sub包下的Student类中,我们只能通过传递一个同一包内的Person对象来间接地访问其name变量和speak()方法:

Student s = new Student();
Person p = new Person();
s.introduce(p); // 输出: Hello, my name is Lucy

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值