JavaSE第二十七讲:访问控制符详解

1. 访问修饰符(access modifier)

   1)public(公共的):被public所修饰的属性和方法可以被所有类访问。

   如一个类:com.test.A ,另外一个类:com.test.hello.B  在类B下面把A的包导入进来就都可以访问了。

2)protected(受保护的):被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问(这个地方注意容易混淆,是在该类的子类内部访问这个属性)

程序一:

package com.shengsiyuan;

public class C{
	protected int year = 2012;
}
程序二:
package com.shengsiyuan;

public class D{
	public static void main(String[] args){
		C c = new C();
		System.out.println(c.year);
	}
}
编译执行:

D:\src>javac -d . C.java
D:\src>javac -d . D.java
D:\src>java com.shengsiyuan.D
2012

【说明】:protected定义属性,同一个包下能被访问。


继续修改以上两个例子

程序一:

package com.shengsiyuan;

public class C{
	protected int year = 2012;
}

程序二:

package com.shengsiyuan.test;
import com.shengsiyuan.C;

public class D{
	public static void main(String[] args){
		C c = new C();
		System.out.println(c.year);
	}
}
编译执行:

D:\src>javac -d . D.java
D.java:7: 错误: year可以在C中访问protected
                System.out.println(c.year);
                                    ^
1 个错误

【说明】:protected定义属性,不同包下不能被访问。


继续修改这两个程序:

程序一:

package com.shengsiyuan;

public class C{
	protected int year = 2012;
}
程序二:
package com.shengsiyuan.test;
import com.shengsiyuan.C;

public class D extends C{
	public void output(){
		System.out.println(year);
	}
	public static void main(String[] args){
		D d = new D();
		System.out.println(d.year);
	}
}
编译结果:

D:\src>javac -d . C.java
D:\src>javac -d . D.java
D:\src>java com.shengsiyuan.test.D
2012

【说明】:protected定义的属性,可以在该类的子类所访问,意思是可以被子类继承下来作为属性来使用。注意此处与下面两个程序进行比较。下面这个程序是在子类中生成父类的对象然后访问父类的属性,这两个是不一样的。

【注意】:被protected所修饰的属性和方法可以被该类的子类所访问的意思是说可以在该类的子类内部所访问,以下程序,虽然是在其子类生成对象,但最终还是调用C类的属性,所以意思是不同,这一点容易出错。

程序一:

package com.shengsiyuan;

public class C{
	protected int year = 2012;
}
程序二:
package com.shengsiyuan.test;
import com.shengsiyuan.C;

public class D extends C{
	public static void main(String[] args){
		C c = new C();
		System.out.println(c.year);
	}
}
编译结果:

D:\src>javac -d . C.java
D:\src>javac -d . D.java
D.java:7: 错误: year可以在C中访问protected
                System.out.println(c.year);
                                    ^
1 个错误


3)private(私有的):被private所修饰的属性和方法只能在该类内部使用,就是属性和方法不能被继承下来。


4)默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。

程序一:

package com;

public class A{
	int a = 10;
}

程序二:

package com.shengsiyuan;
import com.A;

public class B{
	public static void main(String[] args){
		A a = new A();
		System.out.println(a.a);
	}
}

编译结果:

D:\src>javac -d . A.java
D:\src>javac -d . B.java
B.java:7: 错误: a在A中不是公共的; 无法从外部程序包中对其进行访问
                System.out.println(a.a);
                                    ^
1 个错误

【说明】:a不加任何修饰符,是默认的,就是在类内部以及相同包下面的类所使用。

2. instanceof: 判断某个对象是否是某个类的实例。语法形式:引用名instanceof类名(接口名),返回一个boolean值。

public class InstanceofTest{
	public static void main(String[] args){
		People people = new People();
		System.out.println(people instanceof People);
	}
}

class People{

}

编译结果:
D:\src>java InstanceofTest
true


修改程序如下:

public class InstanceofTest{
	public static void main(String[] args){
		People people = new Man();
		System.out.println(people instanceof People);
	}
}

class People{

}

class Man extends People{

}

编译结果:
D:\src>java InstanceofTest
true

【说明】:People people = new Man(); System.out.println(people instanceof People); //结果为true,因为Man是People的子类,根据继承,子类就是父类,因此Man也可以看作是People的实例。 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值