Java封装性

一个关于封装性的思考

我们知道,在面向对象语言里都有private这个关键词,表示被这个修饰的属性或者方法,不想被其他的类或对象获取。即便是自身的对象,它也不能轻易获取。

为什么要说轻易呢,在Java中,由于反射机制的存在,实际上也是能获取到private的属性以及值的。

这个私有也只是相对其他类和对象而言,也就是说,在本类中的方法都可以调用自己的私有属性。

这没什么难理解的。

但是可能有一些小伙伴会认为private修饰后,如果创建了一个本类对象,这个对象是无法访问自己的私有属性的,其实这句话对也不对。
对的点在于 如果这个对象在另一个类中被创建出来,那么它确实不能访问自己的私有属性。(由于Java只有类,main方法也只能运行在某个类中)
但是如果在本类中,即便创建了对象,那这个对象也是能访问自己的私有属性的。
即本类能访问所有本类对象的私有属性,这是类权限,要更大一些。
java
public class Dog implements Comparable {
private int size;
private String name;

public Dog() {
}

public Dog(int size, String name) {
    this.size = size;
    this.name = name;
}

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

public String getName() {
    return name;
}

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

public int compareTo(Dog uddaDog) {
    return this.size - uddaDog.size;
}

private static class NameComparator implements Comparator<Dog> {
    public  int compare(Dog a, Dog b) {
        return a.name.compareTo(b.name);
    }
}

这里看一段Java代码,这里有两个参数被传入,分别是Dog a和Dog b,这时候你会发现这里直接调用a,b的私有属性name都是可以的,且不会报错。
这里的类是内部类,是在DOG类中,所以满足本类。

总结一下,就是本类的方法可以访问本类任何对象的私有属性!而不是本对象,这一点很多小伙伴都会搞混!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值