面向对象基础06(访问权限修饰符)

本文主要介绍Java的访问权限修饰符,包括类中成员和类的访问权限修饰符。类中成员有public、protected、default、private 4种修饰符;类有public和default两种修饰符,内部类有四种。还补充了protected的访问规则,并给出相关题目实例。

访问权限修饰符

修饰符分类

  • 根据修饰符修饰位置的不同,Java的访问权限控制符可以分成两类
    • 修饰类中成员,方法和变量。控制类中的成员,对其他类可见性(其他类是否可以直接使用到)
    • 修饰类。用来限定整个类,对于外部使用者的可见性(是否能使用该类型)

类中成员访问权限修饰符

对于类中成员的访问权限控制,访问权限控制符总位于定义的开头位置,可以使用的修饰符有4种:

​ 1,public:任意类均访问,实际就是没有限制访问权限

​ 2,protected:同包中的其他类,和不同包的(可见)子类均可见,一部分类可以访问到,一部分不行。

​ 3,default(默认权限,隐式定义,不写任何关键字),同包中的其他类可见,不关心是不是子类

​ 4,private,仅对同类中的其他成员可见

在这里插入图片描述
在这里插入图片描述
cn.itcast.Fu

public class Fu {
    private void show1() {
        System.out.println("private");
    }

    void show2() {
        System.out.println("默认");
    }

    protected void show3() {
        System.out.println("protected");
    }

    public void show4() {
        System.out.println("public");
    }

    public static void main(String[] args) {
        //创建Fu的对象,测试看有哪些方法可以使用
        Fu f = new Fu();
        f.show1();
        f.show2();
        f.show3();
        f.show4();
    }

}

在这里插入图片描述
cn.itcast.zi

public class Zi extends Fu {

    public static void main(String[] args) {
        //创建Zi的对象,测试看有哪些方法可以使用
        Zi z = new Zi();
        z.show2();
        z.show3();
        z.show4();
    }

}

在这里插入图片描述
cn.itcast.Demo

public class Demo {
    public static void main(String[] args) {
        //创建Fu的对象,测试看有哪些方法可以使用
        Fu f = new Fu();
        f.show2();
        f.show3();
        f.show4();
    }
}

在这里插入图片描述
com.itheima.zi

import cn.itcast.Fu;
public class Zi extends Fu {

    public static void main(String[] args) {
        //创建Zi的对象,测试看有哪些方法可以使用
        Zi z = new Zi();
        z.show3();
        z.show4();
    }
}

在这里插入图片描述
com.itheima.Demo

import cn.itcast.Fu;
public class Demo {
    public static void main(String[] args) {
        //创建Fu的对象,测试看有哪些方法可以使用
        Fu f = new Fu();
        f.show4();
    }
}

在这里插入图片描述

类访问权限修饰符

​ 对于类的访问权限控制,就简单很多,只有两种:

​ 1,public:对其他任意类可见

​ 2,default:对同包中的其他类可见

​ 3,内部类可以有四种访问权限

为什么使用访问权限控制符?

  • 告诉代码的使用者,哪些地方不要触碰,或者说告诉他们该用什么
    • 工具类,我们不希望别人创建对象,所有私有化构造器
    • 方法的中间方法,我们也不希望别人使用,私有化
    • 私有化构造器,然后提供public方法创建对象
  • 对于代码的书写者而言,隐藏代码的具体实现细节,可以很方便的修改代码实现

那么我们现在是不是已经上了快十天课了吧,是吧?大家觉得累不累啊?其实肯定是很累的,996其实对于我们来说,好像更轻松。大家第一周的问卷,我虽然

补充protected

回顾一下protected关键字,四个等级的访问权限

​ protect修饰符:同包和其他包中的子类可以访问

​ protected四个等级访问:

​ 1,同类中,可以访问

​ 2,同包的子类或其他类中,始终都是可以访问该类的protected成员

​ a,在同包的子类或其他类中,创建该类对象,可以访问该类的protected成员

​ b,在同包的子类或其他类中,创建该类不同包的子类对象时,可以访问访问该类的protected成员

​ 3,不同包的子类中,分情况:

​ a,创建父类对象,无法访问,该类的protected成员

​ b,创建子类对象,可以访问,该类的protected成员

​ c,在该子类中创建另一个子类的对象,无法访问,该类的protected成员

​ 结论:不同包的子类中,只能访问这个子类对象本身,从父类继承过来的,protected成员

​ 而无法访问,父类本身的,protected成员

​ 更不能去访问,其他类,从父类继承过来的,protected成员

​ 4,不同包的其他类中,始终都不可以访问该类的protected成员

​ a,创建该类对象,不可以访问该类的protected成员

​ b,创建该类的子类对象,不可以访问该类的protected成员

​ 总结简单一点:

​ 1,同包中,都可以访问

​ 2,不同包中,只能访问自身,从父类继承过来的,protected成员
在这里插入图片描述

在这里插入图片描述

如果你还是不能理解,那么就要放大招了,比较形象的理解:

​ 1,在家庭中(同包),不管是不是儿子,protected的成员随便用

​ 2,一旦分家后(不同包),只有儿子(子类中)才能用他自己继承过来(子类对象)的protected的成员

题目实例:

定义一个Student类,并要求其他类在使用Student类的时候,最多只能创建10个Student类的对象,如何实现?
提示:
首先,要实现该功能,就不能让外部类直接使用new Student(…)的方式来创建对象,如何不能让其他类new Student(…),只需将Student类的所有构造方法的,权限改为private即可。
接着,把创建对Student对象的工作,交给一个专门的方法去做(想想这个方法应该是怎样的方法),活用static和访问权限修饰符。

public class Student {
    public static void main(String[] args) {
        for (int j = 0; j < 12; j++) {
            Student.newCreate();
        }
    }
    static int i = 1;
    public static Student newCreate() {
        if (i <= 10) {
            System.out.println("输出第" + i + "个对象");
            Student student = new Student();
            i++;
            return student;
        } else {
            System.out.println("对象已满无法创建");
            return null;
        }
    }
}

输出:

输出第1个对象
输出第2个对象
输出第3个对象
输出第4个对象
输出第5个对象
输出第6个对象
输出第7个对象
输出第8个对象
输出第9个对象
输出第10个对象
对象已满无法创建
对象已满无法创建
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值