每日一练5:java类修饰符详解
在前面的文章中,已经了解了java面向对象的核心概念。本文将具体分析类的定义,重点分析和使用java类的访问修饰符public、protected、default、private。
一、类的定义
class 类的名称{
修饰符【public|protected| default |private |static|final】数据类型 成员变量;
修饰符 【public|protected| default|private| static|final】返回值的数据类型 方法名称(数据类型 参数1,数据类型 参数2…){
//方法体
return表达式
}
}
二、不同访问权限时成员变量和方法可见性汇总表
访问权限 |
当前类 |
同一package |
子孙类 |
其他package |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
ⅹ |
default |
√ |
√ |
ⅹ |
ⅹ |
private |
√ |
ⅹ |
ⅹ |
ⅹ |
三、public修饰符
在一个类中,被声明为public的成员变量和方法,则表示该成员变量和方法对所有类和所有包都是可见的。对于当前类而言,自定义的成员变量和方法,不管是什么访问类型,当前类自身都可以访问自己定义的成员变量和方法,因此不在示例中做特别演示。接下来的示例中主要说明在同一packge、子孙类、其他package中的可见性。举例说明如下:
图1 Parent类具有public成员变量
图2 在不同的类中可以访问Parent中age属性
图3 Child类继承自Parent类,因此具有age属性。
图4 同一包chapter5中在子类中可以访问age属性
图5在不同的包中访问Parent的age属性。
四、protected修饰符
在Parent中增加protected 成员变量,如下图6所示:
图6 Parent中增加protected 成员变量
图7在不同的类中可以访问Parent中height属性
图8同一包chapter5中在子类中可以访问height属性
图9在不同的包中不能访问Parent中被protected修饰的height属性
五、default修饰符
在Parent中增加dafault 成员变量weight,默认的就是default访问权限。如下图10所示:
图10 Parent中增加default 成员变量weight
图11在不同的类中可以访问Parent中weight属性
图12同一包chapter5中在子类中不可以访问父类的weight属性
图12中可以看出,parent的weight属性值为120,child的weight属性为10。此时子类child只是继承了父类的weight属性值,并不能直接访问Parent类的对象中的属性weight。
图13在不同的包中不能访问Parent中被default修饰的weight属性
六、private修饰符
被private修饰符修饰的成员变量和方法,只能在本类的内部中使用,内部类除外。在Parent中增加private 成员变量birthday,如下图所示
图14 Parent中增加private 成员变量birthday
图15在不同的类中不可以直接访问Parent中birthday属性
图16在不同的类中可以通过Parent中的public方法访问birthday属性
图17同一包chapter5中在子类中不可以访问父类的private属性birthday
同一包chapter5中在子类中不可以访问父类的private属性birthday,此时子类也没有该birthday属性,因为父类Parent中birthday是private的属性,因此其子类child没有该属性,无法同过继承获得birthday属性。显然,在不同的包中也无法访问该birthday属性。
下一篇文章中将重点介绍java中static和final关键字。
感谢阅读,动一动您的手指,分享给身边的朋友吧!谢谢!
长按识别二维码关注本文公众号