1. 多态在域的问题上是特殊的。我理解不了中文版的书直接叫域,看了英文原版,原版写的是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.

    1. class bike{
    2. static int bikes;
    3. int gear;
    4. int cadence;
    5. void create( int newGear, int newCadence ){
    6. bikes = bikes + 1;
    7. gear = newGear;
    8. cadence = newCadence;}
    9. int getSpeed(){
    10. int speed = gear*cadence*5*3.141;
    11. return speed;
    12. }
    13. }

    '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,类属变量,也称类变量或数据域,其实翻译成属性也可以,类属性,听起来不会怪怪的,来自百度百科)。

    1. class bike{
    2. static int bikes;
    3. int gear;
    4. int cadence;
    5. void create( int newGear, int newCadence ){
    6. bikes = bikes + 1;
    7. gear = newGear;
    8. cadence = newCadence;}
    9. int getSpeed(){
    10. int speed = gear*cadence*5*3.141;
    11. return speed;
    12. }
    13. }

    bikes是一个类变量(静态域)。

    gear 和 cadence 是对象变量(实例变量)(非静态域)。

    (这里有一点点小矛盾,其实这样照百科这样说,那么bikes、gear和cadence都是类变量,bikes是类变量中的静态变量,而gear和cadence是类变量中的实例变量。)

    speed是对象方法的变量(局部变量)。

    (看到没有,local variable,java没有出现gobal variable,全局变量,要说的话类变量的作用范围和全局变量一样,只不过不那样叫)。

    newGear和newCadence是函数(方法)的参数(参数)。

  2. **
  3. * 公共类,在所有包中可见
  4. * @author OOS
  5. *
  6. */
  7. public class PublicClass {
  8. /**
  9. * 公共域,所有子类中可见
  10. */
  11. public int publicNum;
  12. /**
  13. * 私有域,当前类可见
  14. */
  15. private int privateNum;
  16. /**
  17. * 保护域,所有子类中可见
  18. */
  19. protected int protectedNum;
  20. /**
  21. * 默认域,当前包的子类中可见
  22. */
  23. int defaultNum;
  24. /**
  25. * 公共方法
  26. * 可使用:所有类
  27. * 可继承:所有子类
  28. */
  29. public void publicMethod(){};
  30. /**
  31. * 私有方法
  32. * 可使用:当前类
  33. * 可继承:无
  34. */
  35. private void privateMethod(){};
  36. /**
  37. * 保护方法
  38. * 可使用:当前包
  39. * 可继承:所有子类
  40. */
  41. protected void protectedMethod(){};
  42. /**
  43. * 默认方法
  44. * 可使用:当前包
  45. * 可继承:当前包的子类
  46. */
  47. void defaultMethod(){};
  48. /**
  49. * 私有类,仅在定义它的类中可见
  50. * @author OOS
  51. *
  52. */
  53. private class PrivateClass{
  54. }
  55. /**
  56. * 保护类,仅在当前包、当前类和所以子类中可见
  57. * @author OOS
  58. *
  59. */
  60. protected class ProtectedClass{
  61. protected ProtectedClass()
  62. {
  63. }
  64. }
  65. /**
  66. * 默认类,仅在当前包中可见
  67. * @author OOS
  68. *
  69. */
  70. class DefaultClass {
  71. }
  72. }

与PublicClass同一个包中的测试类CurrentPackageTest,如下:

  1. public class CurrentPackageTest extends PublicClass{
  2. public static void main(String[] args)
  3. {
  4. PublicClass pc = new PublicClass();
  5. //当前包可以使用保护方法和默认方法
  6. pc.protectedMethod();
  7. pc.defaultMethod();
  8. //保护类在当前包可见
  9. PublicClass.ProtectedClass protectedClass = new PublicClass().new ProtectedClass();
  10. //默认类在当前包可见
  11. DefaultClass defaultClass = new PublicClass().new DefaultClass();
  12. }
  13. public CurrentPackageTest()
  14. {
  15. System.out.println(super.publicNum);
  16. System.out.println(super.protectedNum);
  17. //PublicClass和当前类同属于一个包,所以defaultNum可继承
  18. System.out.println(super.defaultNum);
  19. }
  20. }

与PublicClass不同一个包中的测试类OtherPackageTest,如下:

    1. public class OtherPackageTest extends PublicClass{
    2. public static void main(String[] args)
    3. {
    4. PublicClass pc = new PublicClass();
    5. //PublicClass与当前类不属于同一个包,仅能使用公共方法
    6. pc.publicMethod();
    7. }
    8. public OtherPackageTest()
    9. {
    10. System.out.println(super.publicNum);
    11. System.out.println(super.protectedNum);
    12. }
    13. }

JAVA中域、方法、类的可见性的更多相关文章

  1. Java基础(43):Java中的Object类与其方法(转)

    Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...

  2. java中,方法可以访问他的类对象的任何私有特性

    java中,方法可以访问他的类对象的任何私有特性 读一本书(Core Java for the Impatient)时,发现这个注意,以前的时候没有在意,今天仔细想想发现记忆不深刻.记录一下 下面代码 ...

  3. Java中clone方法的使用

    什么是clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并 ...

  4. Java中的方法应用

    一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...

  5. 带有静态方法的类(java中的math类)

    带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...

  6. Java中域 实例域 静态域

    1.java中的域 所谓的域,翻译成英文就是field, 也就是我们常说的字段,或者说是属性. 比如类的字段(属性),局部的,全局的.所谓域,其实是“field”的翻译 然后实例域,就是 实例(&qu ...

  7. c#和java中的方法覆盖——virtual、override、new

    多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...

  8. Java中的Unsafe类111

    1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...

  9. Java中的方法(形参及实参)return返回类型

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 pub ...

  10. java中的方法method

    java中的方法必须存在于类class里,不能独立存在.类是描述具有某种特征的事物,方法则是这类 事物具有的某种功能,通过调用方法可以实现某种特定的功能.方法名一般以小写的动词开头. 例: publi ...

随机推荐

  1. DB索引、索引覆盖、索引优化

    ###########索引########### @see   http://mp.weixin.qq.com/s/4W4iVOZHdMglk0F_Ikao7A 聚集索引(clustered inde ...

  2. ASP.NET Web API 使用Swagger使用笔记

    https://www.cnblogs.com/lhbshg/p/8711604.html 最近换了工作,其中Webapi这块没有文档,之前有了解过Swagger借此机会好好整理下常用的地方分享给有需 ...

  3. VSCode------.net core2.0发布后配置到Window Service 2008R2报500错误

    如图: 解决方法: 出现这个错误是因为 IIS 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改. 要取消锁定可以运行命令行 %windir%\system32\ine ...

  4. 1. Oracle安装部署文档

    一. 部署环境步骤 1.1 软件环境 操作系统:CentOS release 6.5oracle安装包:linux.x64_11gR2_database_1of1.zip:linux.x64_11gR ...

  5. MSF 内网渗透笔记

    进入meterpreter模式 在meterpreter中输入shell即可进入CMD窗口接着即可执行CMD命令,例如打开RDP服务REG ADD HKLM\SYSTEM\CurrentControl ...

  6. 如何构建日均千万PV Web站点(二) 之~缓存为王~

    随着网站业务的不断发展,用户的规模越来越大:介于中国无比蹩脚复杂的网路环境:南电信:北联通:中间竟然只用一条链路进行互联通信!有研究表明,网站访问延迟和用户流失率正相关,网站访问速度越慢,用户越容易失 ...

  7. 《Mysql 入门很简单》(读后感②)

    接上篇~ 1.UNIX时间戳函数: UNIX_TIMESTAMP()函数以UNIX时间戳的形式返回当前时间: UNIX_TIMESTAMP(d)函数将时间d以UNIX时间戳的形式返回: FROM_UN ...

  8. (原)一句mpAudioPolicy->get_input引发的血案

    今天分析Android的Audio系统时,对mpAudioPolicy->get_input进行了分析,没想到这一句话的背后如此复杂,简直是一句话引出的血案啊! 分析结果如下:(关于排版:各个变 ...

  9. GCC编译命令常用选项

    GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...

  10. python中字符串(str)的常用处理方法

    str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length= ...