权限修饰符
概述
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
public:公共的。 protected:受保护的 default:默认的 private:私有的
不同权限的访问能力
public protected default(空的) private 同一类中 √ √ √ √ 同一包中(子类与无关类) √ √ √ 不同包的子类 √ √ 不同包中的无关类 √
可见,public具有最大权限。private则是最小权限。 编写代码时,如果没有特殊的考虑,建议这样使用权限:
成员变量使用 private
,隐藏细节。 构造方法使用 public
,方便创建对象。 成员方法使用 public
,方便调用方法。
小贴士:不加权限修饰符,其访问能力与default修饰符相同
default关键字介绍
今天复习偶尔看到了有default关键字,这是有生之年第一次见到这个关键字,然后百度了一下,发现是Java8的新特性,所以干脆详细学习一下,整理了下面的东西。
default常用于接口中,从它的中文意思行来看,大概能猜个差不多,我们本来写Java接口的时候,是不能有方法体的函数,就类似于C++中的虚函数,default关键字在接口中修饰方法时,方法可以有方法体,来看一个例子。
举例
Default类
public interface Default {
default public void method ( ) {
System . out. println ( "接口中的方法" ) ;
}
}
一个接口,method方法在使用关键字default后可以有方法体了。
public class DefaultImpl implements Default {
@Override
public void method ( ) {
System . out. println ( "类中的方法" ) ;
}
public static void main ( String [ ] args) {
Default d = new DefaultImpl ( ) ;
d. method ( ) ;
}
}
DefaultImpl实现了Default接口,最终运行结果:
类中的方法
而此时如果Default接口再加一个方法呢,如果这个方法没有default关键字修饰,则DefaultImpl没有实现这个方法就会报错,这就体现了default关键字的作用。我们继续修改Default接口。
Default接口如下:
public interface Default {
default public void method ( ) {
System . out. println ( "接口中的方法" ) ;
}
default public void doSomeThing ( ) {
System . out. println ( "在接口中搞事情" ) ;
}
}
DefaultImpl并没有重写doSomeThing方法
public class DefaultImpl implements Default {
@Override
public void method ( ) {
System . out. println ( "类中的方法" ) ;
}
// 此时没有去重写接口中的方法doSomeThing
// 在这里会默认生成一个,子类对象调用时候会直接使用接口中的doSomeThing方法
public static void main ( String [ ] args) {
Default d = new DefaultImpl ( ) ;
d. method ( ) ;
d. doSomeThing ( ) ;
}
}
运行结果如下:
类中的方法
在接口中搞事情
运行结果符合Java多态的特性,default关键字可以让接口中的方法可以有默认的函数体,当一个类实现这个接口时,可以不用去实现这个方法,当然,这个类若实现这个方法,就等于子类覆盖了这个方法,最终运行结果符合Java多态特性。