JAVA中域方法类的可见性
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中域方法类的可见性的主要内容,如果未能解决你的问题,请参考以下文章