【JavaSE】protected修饰符和clone方法你真的熟悉吗?

😊protected 引出问题

在这里插入图片描述

protected:翻译为受保护的。

  • 子类在同一包的情况下是可以访问的,问题就是在不同包下的子孙类。当我们某些成员只想让子类访问,那肯定会选择protected修饰符。

问题:

1. 不同包的子类在类内部可以访问基类(父类)的protected修饰的成员吗?

    1. 不同包的子类在类内部可以访问基类(父类)的protected修饰的成员吗?
  • 可以的,子类继承了父类的成员,自然是可以使用的。调用 super 也是可以的。

package ly.pat.test;

import ly.pat.AParent;

public class AParent {

    public String name = "xxx";

    public String getName(){
        return name;
    }

}

public class Son1 extends AParent{
    public void xx(){
        System.out.println(super.getName());
        System.out.println(getName());
    }
    public static void main(String[] args) {
        new Son1().xx();// 编译正常
    }
}

2. 不同包的子类实例化后可以访问基类的protected修饰的成员吗(基类的实例化,子类的实例化异或是子类的向上转型)?

    1. 不同包的子类实例化后可以访问基类的protected修饰的成员吗(基类的实例化,子类的实例化异或是子类的向上转型)?
  • 不可以的,protected 修饰了的成员受保护,不同包的实例化对象是不可以访问它的。
package com.protectedaccess.parentpackage.sonpackage1;

import com.protectedaccess.parentpackage.Parent;

public class Son1 extends Parent{
    public static void main(String[] args) {
        Parent parent1 = new Parent();
        // parent1.getMessage();   错误

        Parent parent2 = new Son1();
        // parent2.getMessage();  错误
    }
}

3. 不同包的子类在内部创建父类对象是否可以访问(不是利用super)?

    1. 不同包的子类在内部创建父类对象是否可以访问(不是利用super)?
  • 不可以的,同样是实例化了。

在这里插入图片描述

😊protected 修饰符总结

  • 不同包下的子类使用基类的 protected 成员不可以通过实例化去调用,可以通过 super 和 在子类内部继承使用。
  • 不同包不是子类不可以,同一包和当前类肯定是可以的。

😊Object 类中的 clone 方法

在这里插入图片描述
clone方法是被protected修饰符修饰的。所以一般使用该方法去clone,都会报错的,虽然Object是所有类的‘爸’,但是实例化是访问不了 clone 的。

解决方法:

  • 实现 Cloneable 接口重写 clone 方法可以使用。重写的clone方法中也是使用 super 或者直接使用的 clone 。实现Cloneable接口是打开可以重写的通道。

在这里插入图片描述

如果不实现Cloneable接口,那么会报错。

在这里插入图片描述

😊数组使用 clone 方法

使用 clone ,其可分为两种,浅克隆和深克隆。

  • 一维数组:深克隆;(重新分配空间,并将元素复制过去)
  • 二维数组:浅克隆。(只传递引用)

深克隆和浅克隆

一维、二维数组使用clone底层细节式讲解

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假正经的小柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值