java主要修饰符论文_第1页
java主要修饰符论文_第2页
java主要修饰符论文_第3页
java主要修饰符论文_第4页
java主要修饰符论文_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java 主要修饰符 引言 java 里面很重要的一部分就是修饰符 要学好 java 就要首先 弄清楚 java 的修饰符 java 修饰符要分清类的修饰符和成员修饰符 类的修饰符有 final abstract public 等 成员的的修饰符就比较多 了 public friendly protected private static final syhncronazed 等等 分不清的话 都先别写修饰符 慢慢理解就好了 这里我主要介绍几 种修饰符 private protected public static 及 final 关键词 修饰符 控制 访问 Java 的修饰符可以大体分为访问控制符和非访问控制符 一 访问修饰符 一般来说 访问控制分 4 种级别 公开 public 同类 同包 子类 不同包 都可以访问 默认 只向同包同类放开 私有 private 只有类本身可以访问 保护 protected 向子类以及同一个包中的类放开 下面具体说明一下各个访问控制符的功能和作用 1 公有访问控制符 public Java 的类是通过包的概念来组织的 包氏类的一个松散的集合 处于同一个包中的类可以不需要任何说明而方便的互相访问和引用 而对于不同包中的类 则不行 但当一个类被声明为 public 时 他 就具有了被其他包中的类访问的可能性 只要这些其他包中的类在 程序中使用 import 语句引入 public 类 就可以访问和引用这个类 类中被设定为 public 的方法是这个类对外的接口部分 避免了程 序的其他部分直接去操作类内的数据 这实际就是数据封装思想的 体现 每个 Java 程序的主类都必须是 public 类 也是基于相同的原因 用 public 修饰的类的域称为公共域 如果公共域属于公共类 则 它能被所有的其他类所引用 public 修饰符会造成安全性的数据封 装性下降 所以一般应减少 public 域的使用 2 缺省访问控制符 缺省访问控制权规定 该类只能被同一个包中的类访问和引用 而不可以被其他包中的类使用 这种访问特性又称为包访问性 同样道理 类内的域或方法如果美育访问控制符来限定 也就 具有包访问性 简单说 定义在同一个程序中的所有类属于一个包 3 私有访问控制符 private 用 private 修饰得域或方法只能被该类自身所访问和修改 而且 不能被任何其他类 包括该类的子类 来获取和引用 private 修饰 符用来声明那些类的私有成员 它提供了最高的保护级别 4 保护访问控制符 protected 用 protected 修饰的成员变量可以被三种类所引用 该类自身 与它在同一个包中的其它类 在其他包中的该类的子类 使用 protected 修饰符的主要作用是允许其他包中该类的子类来访问父类 的特定属性 5 私有保护访问控制符 private protected 用 private protected 修饰的成员变量可以被两种类访问和引用 一种是该类本身 一种是该类的所有子类 把同一个包内的非子类 排除在可访问的范围之外 使得成员变量更专于具有明确继承关系 的类 而不是松散地组合在一起的包 权限修饰符的用法 总结为下表 修饰符包外子类包内类内 publicyesyesyesyes protectednoyesyesyes defaultnonoyesyes publicnononoyes 类的访问控制修饰符类的访问控制修饰符 非内部类非内部类 修饰符public默认修饰符 作用任何地方都能访问 包访问权限 包内可以访问 包 外无法访问 类的成员访问控制修饰符类的成员访问控制修饰符 publicprotected默认修饰符private 包外 子类 包内 类内 下面举例说明 例 1 先定义一个 ClassA 并把它放在 mypack1 包中 package mypack1 public class ClassA 修饰符 作用范围 public int var1 protected int var2 int var3 private int var4 public void method var1 1 var2 1 var3 1 var4 1 ClassA a new ClassA a var1 1 a var2 1 a var3 1 a var4 1 然后又在另外一个包 mypackage2 中 存在 ClassA 的一个子类 ClassC package mypack2 import mypack1 ClassA class ClassC extends mypack1 ClassA public void method ClassA a new ClassA a var1 1 a var2 1 此行出错 实际上这个例子有问题 你会看到 ide 或者编译时 在 a var2 1 这一行报错 提示不能访问 protected 对象 这就是 protected 经常被人忽视的地方 尽管 ClassC 是 ClassA 的一个子类 但是在 ClassC 中创建的是 ClassA 的一个实例 该实例中的 protected 成员变量则很明显没有被 ClassC 继承到 自然在 ClassC 中无法访问 var2 所以对于这种情况 将代码改为如下 则可以编译通过 package mypack2 import mypack1 ClassA class ClassC extends mypack1 ClassA public void method ClassA a new ClassA a var1 1 super var2 1 ClassC c new ClassC c var1 1 c var2 1 例 2 class A int weight int f int a int b 方法体 假设 B 与 A 在同一个包中 则 class B void g A a new A A weight 100 合法 A f 3 4 合法 private 只能在本类中访问 eg class Test private int money Test money 2000 private int getMoney return money public static void main String args Test te new Test te money 3000 合法 int m te getMoney 合法 System out println money m 例 3 Father java package com aaa public class Father int height protected int money 120 public int weight protected int getMoney return money void setMoney int newMoney money newMoney Son java package com bbb import com aaa Father public class Son extends Father void f money 10000 合法 height 170 非法 height 为 friendly 修饰的变量 System out println money 输出结果是 10000 setMoney 300 非法 int number getMoney 合法 System out println number 输出结果是 10000 public static void main String args Son sss new Son sss f 所以 访问权限修饰符权限从高到低排列是 public protected friendly private 二 访问修饰符 1 静态修饰符 被 static 修饰的属性不属于任何一个类的具体对象 是公共的存 储单元 任何对象访问它时 取到的都是相同的数值 静态属性 石类属性 当需要引用或修改一个 static 限定的类属性时 可以使用类名 页可以使用某一个对象名 效果相同 用 static 修饰符修饰的方 法 是属于整个类的方法 例如 在 PhoneCard200 中如果需要修改附加费 可以定义一个 静态方法 setAdditory static void setAdditory double newAdd if newAdd 0 additoryFee newAdd 用 static 修饰的方法的含义 1 调用这个方法时应该使用类名做前缀 不用某个具体的对象 名 2 该方法属于整个类 它在内存中的代码段随着类的定义而分 配和装载 3 该方法不能操纵属于某个对象的成员变量 即 static 方法只能 处理 static 属性 2 抽象类修饰符 用 abstract 修饰的类或方法 没有具体实例对象的类 使用抽象 类的优点就是可以充分利用公共属性来提高开发和维护程序的效 率 java 语句可表述为 abstract class transportmeans float speed 速度 void start 启动 void stop 停止 float speedUp float increaseSpeed 加速 3 最终类修饰符 用 final 最终修饰符来修饰类 属性和方法 1 最终类 不可能有子类 2 最终属性 域 可用来修饰常量 若成员变量被声明为 final 则整个执行过程中都不会变 语法 static final double additoryFee 0 1 注意 需要说明常量的数据类型 需要同时指出常量的具体取值 为了节省空间 常量通常被声明为 static 3 最终方法 功能和语句都不能被修改的最终方法 即不能 被当前类的子类重载 目的是为了预防不必要的重复定义 例 final double getAdditoryFee return additoryFee 注意 所有已被 private 修饰符限定为私有的方法 以及所有包含 在 final 类中的方法 都被缺省地认为是 final 的 例 1 public abstract class PlaneGraphics1 平面图形类 抽 象类 private String shape 形状 public PlaneGraphics1 String shape this shape shape public PlaneGraphics1 this 未知 public abstract double area 计算面积 抽象方法 分号 必不可少 public void print 显示面积 非抽象方 法 System out println this shape 面积为 this area 设计长方形类 Rectangle1 继承平面图形类 public class Rectangle1 extends PlaneGraphics1 protected double length 长度 protected double width 宽度 public Rectangle1 double length double width 构造方法 super 长方形 this length length this width width public Rectangle1 double width 正方形是长方形的特 例 super 正方形 this length width this width width public Rectangle1 this 0 0 public double area 计算长方形面积 实现父类的抽象 方法 return this width this length public class Elipse1 extends PlaneGraphics1 椭圆类 protected double radius a a 轴半径 protected double radius b b 轴半径 public Elipse1 double radius a double radius b 构造方法 super 椭圆 this radius a radius a this radius b radius b public Elipse1 double radius a 圆是椭圆的特例 super 圆 this radius a radius a this radius b radius a public Elipse1 this 0 0 public double area 计算椭圆的面积 实现 父类的抽象方法 return Math PI this radius a this radius b class PlaneGraphics1 ex public static void main String args PlaneGraphics1 g1 new Rectangle1 10 20 获得子类长方 形实例 g1 print print 不时运行时多态性 其中调用的 area 表 现运行时多态性 g1 new Rectangle1 10 正方形 g1 print g1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论