方法返回不同类的对象

时间:2013-12-27 17:58:49

标签: oop

我注意到有一种class(例如:ClassA)具有变量声明和各种方法的情况。在另一个class(例如:Class B)中,有一个方法(MethodofClassB()),其方法的返回类型为ClassA

所以它就像:

 Class A
  {
      variable i,j;

      public int MethodA()
      {
       //some operation
      }
  }

 Class B
  {
      variable x,y;

      public static A MethodB()
      {
       //some operation
        return obj;
      }
  }

1)我理解MethodB()返回ClassA的对象。 Waty将是返回ClassA对象的用途(意图)

2)将MethodB()定义为Public static的原因是什么。如果静态未用于MethodB()

会发生什么

3)返回的objct是什么样的。我的意思是如果我的方法返回一个整数,它将返回一些数字值'123'。如果一个方法返回一个类的对象,那么返回值将是什么。

请通过一个小例子帮助我理解

2 个答案:

答案 0 :(得分:4)

  

1)我理解MethodB()返回ClassA的对象。 Waty将是返回ClassA对象的用途(意图)

取决于该方法的作用,本示例中未说明。如果操作的结果是A的实例,那么无论A是什么,它都会返回A的实例。

例如,如果ACarBCarFactory,则该方法可能会产生新的Car。因此它会返回已生成的Car

  

2)将MethodB()定义为Public static的原因是什么。如果静态未用于MethodB()

会发生什么

public允许其他对象访问它。 static表示它与B的特定实例无关。两者都是基于主观的,基于该方法的目的(在该示例中未定义)。成为static,可以这样称呼:

var newInstance = B.MethodB();

如果不是static,则需要B的实例:

var objectB = new B();
var newInstance = objectB.MethodB();

这里有越来越多的含义,包括内存/资源使用和线程安全等内容。所有这些都源于B 的目的和业务逻辑含义以及MethodB 所做的

  

3)返回的objct是什么样的。我的意思是如果我的方法返回一个整数,它将返回一些数字值'123'。如果一个方法返回一个类的对象,那么返回值将是什么。

这将是A的一个实例。与在此处创建实例类似:

var objectA = new A();

此方法还会创建(或以某种方式获取)实例:

var objectA = B.MethodB();

在不了解A是什么,它的构造函数做什么以及MethodB做什么的情况下,这两个操作在其他方面是相同的。

答案 1 :(得分:-1)

首先,您的代码不正确。没有“ClassA”课程。类名是A,因此返回类型应为A而不是ClassA。

其次,标准的Java编码标准说用小写字母开始方法和变量。所以,你的例子应该是:

 Class A
  {
      A anA;
      B aB;

      public int methodA()
      {
       //some operation
      }
  }

 Class B
  {
      SomeType x, y;

      public static A methodB()
      {
       //some operation
        return obj;
      }
  }

大卫在我之前的回答在技术上在第1点和第2点是正确的,尽管他也使用了你调用A型ClassA的错误。然而,他对第3点的回答的代码是不正确和误导的。我会改变他的措辞:

`3)What would the returned objct look like. I mean if my method returned an 
integer, it would return some numerical value say '123' . If a method returns
an object of a class, what would be in the returrned value`.

它将是A类的一个实例。类似于在此处创建实例:

A objectA = new A();

此方法还创建(或以某种方式获取)实例:

A objectA = B.methodB();

在不知道更多关于A类是什么,它的构造函数是什么以及methodB做什么的情况下,这两个操作在其他方面是相同的。