每日一练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中的可见性。举例说明如下:

每日一练5:java类修饰符详解

图1 Parent类具有public成员变量

每日一练5:java类修饰符详解

图2 在不同的类中可以访问Parent中age属性

 

每日一练5:java类修饰符详解

图3 Child类继承自Parent类,因此具有age属性。

每日一练5:java类修饰符详解

图4 同一包chapter5中在子类中可以访问age属性

每日一练5:java类修饰符详解

图5在不同的包中访问Parent的age属性。

四、protected修饰符

在Parent中增加protected 成员变量,如下图6所示:

每日一练5:java类修饰符详解

图6 Parent中增加protected 成员变量

每日一练5:java类修饰符详解

图7在不同的类中可以访问Parent中height属性

每日一练5:java类修饰符详解

图8同一包chapter5中在子类中可以访问height属性

每日一练5:java类修饰符详解

图9在不同的包中不能访问Parent中被protected修饰的height属性

五、default修饰符

在Parent中增加dafault 成员变量weight,默认的就是default访问权限。如下图10所示:

每日一练5:java类修饰符详解

图10  Parent中增加default 成员变量weight

每日一练5:java类修饰符详解

图11在不同的类中可以访问Parent中weight属性

每日一练5:java类修饰符详解

图12同一包chapter5中在子类中不可以访问父类的weight属性

图12中可以看出,parent的weight属性值为120,child的weight属性为10。此时子类child只是继承了父类的weight属性值,并不能直接访问Parent类的对象中的属性weight。

每日一练5:java类修饰符详解

图13在不同的包中不能访问Parent中被default修饰的weight属性

六、private修饰符

被private修饰符修饰的成员变量和方法,只能在本类的内部中使用,内部类除外。在Parent中增加private 成员变量birthday,如下图所示

每日一练5:java类修饰符详解

图14  Parent中增加private 成员变量birthday

每日一练5:java类修饰符详解

图15在不同的类中不可以直接访问Parent中birthday属性

每日一练5:java类修饰符详解

图16在不同的类中可以通过Parent中的public方法访问birthday属性

每日一练5:java类修饰符详解

图17同一包chapter5中在子类中不可以访问父类的private属性birthday

同一包chapter5中在子类中不可以访问父类的private属性birthday,此时子类也没有该birthday属性,因为父类Parent中birthday是private的属性,因此其子类child没有该属性,无法同过继承获得birthday属性。显然,在不同的包中也无法访问该birthday属性。

下一篇文章中将重点介绍java中static和final关键字。

感谢阅读,动一动您的手指,分享给身边的朋友吧!谢谢!

每日一练5:java类修饰符详解

长按识别二维码关注本文公众号