JAVA的private关键字理解

java中关于变量定义前面可以有前缀加以修饰,具体包括:private, public, protected.

private修饰的变量只能在其所属的类中被直接访问

class A {
	private int a = 1;
	public int b = 2;
}
class B extends A {
	System.out.println(a); //私有变量,不可以访问
	System.out.println(b); //可以访问
}

但是,并不是说不能访问,可以通过间接的方式访问到父类中的私有变量

package Think.Seven;
// 代码来自JAVA编程思想

class Cleanser {
    private String s = "Cleanser";
    public void append(String a) {s += a; }
    public void dilute() {append(" dilute() "); }
    public void apply() {append(" apply() "); }
    public void scrub() {append(" scrub() "); }
    public String toString() {return s; }

    public static void main(String[] args) {
        Cleanser x = new Cleanser();
        x.dilute(); x.apply(); x.scrub();
        System.out.println(x); //调用toString()方法
    }
}

public class Detergent extends Cleanser {
    public void scrub() {
        append(" Detergent.scrub() ");
        super.scrub(); //调用原来的scrub
    }
    public void foam() {append(" foam() "); }

    public static void main(String[] args) {
        Detergent x = new Detergent();
        x.dilute();
        x.apply();
        x.scrub();
        x.foam();
        System.out.println(x);
        System.out.println("Testing base class:");
        Cleanser.main(args);
    }
}

其输出为:在这里插入图片描述
这里涉及到许多知识点:
首先,JAVA程序运行,在一般会寻找到public类中main函数(所以,一般一个代码中只能有一个public类,且要和文件同名。)main函数新建了一个Detergent类x,一系列操作后,打印x,它会调用该类中的toString()方法。由于父类中的toString方法是public修饰的,故而也被继承来了,因此将变量打印来了。整个过程中,虽然Cleanser中的变量s是私有的,但是依然可以在Detergent被打印。

总结就是:
私有属性在子类中并不是不能访问,只是不能直接访问。
打印类,会调用toString方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值