Java private public protected static final 继承 的学习总结

温故而知新!

private,public,protect在继承中限制父类元素的继承权限。

private

私有的,对象不能在外部直接调用,类内可直接使用,无法被子类调用。但是既然继承了,却不可以调用,就很尴尬,所以get/set方法就可以大显神通了。

感觉好难啊!我就这么记忆:继承就好比是在父类外面裹一层叫一个新名字而已,private修饰的元素是父类私有的不会传递给子类,故而子类无法直接访问,只能通过get/set访问

/*父类*/
package P;

public class Pr {
    private Integer count4 = 4;
}

/*子类*/
package P;

public class PrChild extends Pr{
    //编译会报错,可以看出this和super都无法访问
    public void show(){
        System.out.println(super.count4);
        System.out.println(this.count4);
    }
}

public

顾名思义,公开的!啥叫公开,就是无论对象,子类,无论类内外都可以调用。

protected

受保护的,类似Linux的用户和组的概念,被修饰的元素可在子类中,同包下的类内外调用。但是无法被外包的类调用。

package P;
public class Pr {
    protected Integer count4 = 4;//子类无法通过super,this进行访问
}
//不同包下的子类可访问
package S;
import P.Pr;
public class SrChild extends Pr {
    public void show(){
        System.out.println(super.count4);
    }
}
//不同包下的非子类不可访问
package S;
import P.Pr;
public class Sr {
    public static void main(String[] args) {
        Pr pr = new Pr();
        System.out.println(pr.count4);//这里是要报错的!
    }
}

package S;

public class Sr {
    public static void main(String[] args) {
        SrChild srChild = new SrChild();
        System.out.println(srChild.count4);//仍然报错!即便不同包下的SrChild继承了Pr
    }
}

static

static修饰的元素,此类的对象共享,也就是说,同类的不同对象访问的是同一内存位置。既然是公有的元素,不但对象可以调用而且类也可以调用。

package P;

public class Pr {
    public static Integer count2 = 2 ;
}

/*测试类*/
import P.Pr;
import org.junit.jupiter.api.Test;

public class PrTest {
    @Test
    public void test(){
        Pr pr = new Pr();
        System.out.println(Pr.count2);//类调用
        System.out.println(pr.count2);//对象调用-原理可行,但是工作中不推荐这样搞
    }
}

final

final修饰“不变”值,啥意思呢?就是被修饰的元素永永远远就是初始值了,不会更改了(也更改不了),既然都不会更改了,那没必要在每次new对象时重复创建了吧?对!使用同一内存中的数据,不过类无法调用,如果希望类调用,就加上static。

package P;

public class Pr {
    public final Integer count = 10;
}
/*测试类*/
import P.Pr;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

public class PrTest {
   
     @Test
    public void test2(){
        Pr pr1 = new Pr();
        Pr pr2 = new Pr();
        System.out.println(pr1.count);
        System.out.println(pr2.count);
        System.out.println(pr1.hashCode() == pr2.hashCode()); //结果FALSE,证明pr1与pr2所指向的内存空间不同
        System.out.println(pr2.count.hashCode() == pr1.count.hashCode()); // 结果是TRUE,证明两者的count属性所指内存空间相同
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值