JAVA中域、方法、类的可见性
多态在域的问题上是特殊的。我理解不了中文版的书直接叫域,看了英文原版,原版写的是fields,直接翻译虽然没错,但是出问题的变量不是域。特地查了what is the meaning of field in java?很多人把它看成是由花括号括起来的一个范围。其实框架里面也有一种东西——domain model,这个也叫域,域模型。
然后找到这篇文章
What is a field in java?
A field is an attribute. A field may be a class's variable, an object's variable, an object's method's variable, or a parameter of a function.
- class bike{
- static int bikes;
- int gear;
- int cadence;
- void create( int newGear, int newCadence ){
- bikes = bikes + 1;
- gear = newGear;
- cadence = newCadence;}
- int getSpeed(){
- int speed = gear*cadence*5*3.141;
- return speed;
- }
- }
'bikes' is a class's variable (class variable) (static field).
'gear' and 'cadence' could be an object's variables (instance variables) (non-static fields).
'speed' is an object's method's variable (local variable).
'newGear' and 'newCadence' are parameters of a function (parameters).field,域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。(补充,class‘s variables,类的实例变量和静态变量称为class's variables,类属变量,也称类变量或数据域,其实翻译成属性也可以,类属性,听起来不会怪怪的,来自百度百科)。
- class bike{
- static int bikes;
- int gear;
- int cadence;
- void create( int newGear, int newCadence ){
- bikes = bikes + 1;
- gear = newGear;
- cadence = newCadence;}
- int getSpeed(){
- int speed = gear*cadence*5*3.141;
- return speed;
- }
- }
bikes是一个类变量(静态域)。
gear 和 cadence 是对象变量(实例变量)(非静态域)。
(这里有一点点小矛盾,其实这样照百科这样说,那么bikes、gear和cadence都是类变量,bikes是类变量中的静态变量,而gear和cadence是类变量中的实例变量。)
speed是对象方法的变量(局部变量)。
(看到没有,local variable,java没有出现gobal variable,全局变量,要说的话类变量的作用范围和全局变量一样,只不过不那样叫)。
newGear和newCadence是函数(方法)的参数(参数)。
- **
- * 公共类,在所有包中可见
- * @author OOS
- *
- */
- public class PublicClass {
- /**
- * 公共域,所有子类中可见
- */
- public int publicNum;
- /**
- * 私有域,当前类可见
- */
- private int privateNum;
- /**
- * 保护域,所有子类中可见
- */
- protected int protectedNum;
- /**
- * 默认域,当前包的子类中可见
- */
- int defaultNum;
- /**
- * 公共方法
- * 可使用:所有类
- * 可继承:所有子类
- */
- public void publicMethod(){};
- /**
- * 私有方法
- * 可使用:当前类
- * 可继承:无
- */
- private void privateMethod(){};
- /**
- * 保护方法
- * 可使用:当前包
- * 可继承:所有子类
- */
- protected void protectedMethod(){};
- /**
- * 默认方法
- * 可使用:当前包
- * 可继承:当前包的子类
- */
- void defaultMethod(){};
- /**
- * 私有类,仅在定义它的类中可见
- * @author OOS
- *
- */
- private class PrivateClass{
- }
- /**
- * 保护类,仅在当前包、当前类和所以子类中可见
- * @author OOS
- *
- */
- protected class ProtectedClass{
- protected ProtectedClass()
- {
- }
- }
- /**
- * 默认类,仅在当前包中可见
- * @author OOS
- *
- */
- class DefaultClass {
- }
- }
与PublicClass同一个包中的测试类CurrentPackageTest,如下:
- public class CurrentPackageTest extends PublicClass{
- public static void main(String[] args)
- {
- PublicClass pc = new PublicClass();
- //当前包可以使用保护方法和默认方法
- pc.protectedMethod();
- pc.defaultMethod();
- //保护类在当前包可见
- PublicClass.ProtectedClass protectedClass = new PublicClass().new ProtectedClass();
- //默认类在当前包可见
- DefaultClass defaultClass = new PublicClass().new DefaultClass();
- }
- public CurrentPackageTest()
- {
- System.out.println(super.publicNum);
- System.out.println(super.protectedNum);
- //PublicClass和当前类同属于一个包,所以defaultNum可继承
- System.out.println(super.defaultNum);
- }
- }
与PublicClass不同一个包中的测试类OtherPackageTest,如下:
- public class OtherPackageTest extends PublicClass{
- public static void main(String[] args)
- {
- PublicClass pc = new PublicClass();
- //PublicClass与当前类不属于同一个包,仅能使用公共方法
- pc.publicMethod();
- }
- public OtherPackageTest()
- {
- System.out.println(super.publicNum);
- System.out.println(super.protectedNum);
- }
- }
JAVA中域、方法、类的可见性的更多相关文章
- Java基础(43):Java中的Object类与其方法(转)
Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...
- java中,方法可以访问他的类对象的任何私有特性
java中,方法可以访问他的类对象的任何私有特性 读一本书(Core Java for the Impatient)时,发现这个注意,以前的时候没有在意,今天仔细想想发现记忆不深刻.记录一下 下面代码 ...
- Java中clone方法的使用
什么是clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并 ...
- Java中的方法应用
一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...
- 带有静态方法的类(java中的math类)
带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...
- Java中域 实例域 静态域
1.java中的域 所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性. 比如类的字段(属性),局部的,全局的.所谓域,其实是“field”的翻译 然后实例域,就是 实例(&qu ...
- c#和java中的方法覆盖——virtual、override、new
多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...
- Java中的Unsafe类111
1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...
- Java中的方法(形参及实参)return返回类型
如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...
- java中的方法method
java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...
随机推荐
- Ubuntu16.04下安装CUDA8.0和tensorflow
GPU版的Tensorflow无疑是深度学习的一大神器,当然caffe之类的框架也可以用GPU来加速训练. 注意:以下安装默认为python2.7 1. 安装依赖包 $ sudo apt-get in ...
- Vim 操作符命令和动作命令
http://www.cnblogs.com/littlerabbit/articles/2349951.html
- 【scala】scala 数组 (三)
基础内容 1. 数组定义 定长.可变数组的定义;元素添加,删除,排序,求和等常用运算 import scala.collection.mutable.ArrayBuffer import scala. ...
- android应用开发-从设计到实现 3-4 静态原型的状态栏
静态原型的状态栏 状态栏Symbol 状态栏似乎非常复杂,有wifi信号.手机信号.时间.电量等信息,幸好Sketch原生就自带的现成组件,你能够直接拿过来就用了.当然.你也能够自己一个一个去画,只是 ...
- 5 -- Hibernate的基本用法 --1 2 基本映射方式
ORM工具提供了持久化类和数据表之间的映射关系.实际上,所有的ORM工具大致上都遵循相同的映射思路,ORM基本映射有如下几条映射关系: ⊙ 数据表映射类 : 持久化类被映射到一个数据表.程序使用这个持 ...
- 基于Python的接口自动化测试框架
项目背景 公司内部的软件采用B/S架构,目的是进行实验室的数据存储.分析.管理. 大部分是数据的增删改查,但是由于还在开发阶段,所以UI的变化非常快,难以针对UI进行自动化测试,那样会消耗大量的精力与 ...
- mongo数据库查询结果不包括_id字段方法
db.GPRS_PRODUCT_HIS_FEE.find({"条件字段" : "412171211145135"},{_id:0}) db.GPRS_PRODU ...
- Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
转自:http://blog.csdn.net/iamdll/article/details/20998035 分类: 分布式 2014-03-11 10:31 156人阅读 评论(0) 收藏 举报 ...
- Java中过滤器和拦截器的区别
1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器. 3.拦截器只对action起作用,而过滤器几乎可以对所有请求起 ...
- iOS 静态库和动态库(库详解)
什么是库 ? 库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式.库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行. 库的分类 开源库:源代码是公开的,可以看到每个实现 ...