projected访问修饰符误区

今天在检验垃圾回收方法时,想通过对象调用finalize方法来进行垃圾回收,却未找到当前方法,发现自己在基础方向尚有欠缺。

finalize方法是被projected来修饰的,那么需要针对关键字来理解一下了。

projected访问修饰符,它能在哪些地方调用呢?

先创建一个学生类:

package com.bo.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@ConfigurationProperties(prefix = "student")
@Component
public class Student {

    private String name;

    private Integer age;

    private List<String> subjects;

    protected String temp;

    private Student friend;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<String> getSubjects() {
        return subjects;
    }

    public void setSubjects(List<String> subjects) {
        this.subjects = subjects;
    }

    public Student getFriend() {
        return friend;
    }

    public void setFriend(Student friend) {
        this.friend = friend;
    }


    protected  void outStudent(){
        System.out.println("我是Struent类");
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", subjects=" + subjects +
                ", friend=" + friend +
                '}';
    }

    @Override
    protected void finalize() throws Throwable {
        try{
            //release resources here
            System.out.println("finalize已调用");
        }catch(Throwable t){
            throw t;
        }finally{
            super.finalize();
        }
    }
}

我们看到temp属性定义的是projected访问修饰符,那么我在同一个包下的另一个类中直接访问这个属性:

package com.bo.pojo;

import com.bo.annotate.DbColumn;
import com.bo.annotate.DbTable;


public class Teacher {

   
    public void test(){
        Student student = new Student();
        student.temp = "1";
    }
}

这个时候直接访问student类的temp是不报错的,因为它们都在com.bo.pojo这同一个包下。

但如果我们换一个包下调用呢?

这个时候就没有办法直接调用了,会爆红报错。

那么在不同包下继承这个student类呢?

当然在这个继承类的方法内部就可以直接调用student.temp了。

用projected修饰的方法也是同样的道理。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值