Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 方法返回不同类的对象_Oop - Fatal编程技术网

Oop 方法返回不同类的对象

Oop 方法返回不同类的对象,oop,Oop,我注意到有一种情况,即有一个class(比如:ClassA)具有变量声明和各种方法。在另一个类(比如:类B)中,有一个方法(MethodofClassB()),该方法的返回类型为ClassA 所以它就像: Class A { variable i,j; public int MethodA() { //some operation } } Class B { variable x,y; p

我注意到有一种情况,即有一个
class
(比如:
ClassA
)具有变量声明和各种方法。在另一个
(比如:
类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()返回类A的对象。Waty是返回ClassA对象的用途(意图)

2) 将MethodB()定义为公共静态的原因是什么。如果MethodB()不使用static,会发生什么

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

请用一个小例子帮助我理解这一点

1) 我知道MethodB()返回类A的对象。Waty是返回ClassA对象的用途(意图)

取决于该方法的功能,本例中未对此进行说明。如果操作的结果是
A
的实例,那么它将返回
A
的实例,无论
A
是什么

例如,如果
A
Car
B
CarFactory
,则该方法可能会生成新的
Car
。因此,它将返回一辆已生产的
汽车

2) 将MethodB()定义为公共静态的原因是什么。如果MethodB()不使用static,会发生什么

public
允许其他对象访问它<代码>静态
表示它与
B
的特定实例不关联。这两种方法都是基于主观的,同样是基于方法的目的(示例中没有定义)。它是静态的,可以这样调用:

var newInstance = B.MethodB();
如果它不是
静态的
,则需要
B
的实例:

var objectB = new B();
var newInstance = objectB.MethodB();
这里有越来越多的含义,包括内存/资源使用和线程安全。所有这些都源于
B
是什么以及
MethodB
做什么的目的和业务逻辑意义

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

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

var objectA = new A();
A objectA = new A();
此方法还创建(或以某种方式获取)实例:

var objectA = B.MethodB();
A objectA = B.methodB();

如果不知道
A
是什么,它的构造函数做什么,以及
MethodB
做什么,这两个操作在其他方面是相同的。

首先,您的代码不正确。没有“ClassA”类。类名是,因此返回类型应该是而不是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;
      }
  }
David在我之前不久的回答在第1点和第2点上在技术上是正确的,尽管他也使用了您将A类型称为ClassA的错误。然而,他对第三点的回答代码是不正确的,具有误导性。我想把他的措辞改为:

`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类的实例。类似于在此处创建实例:

var objectA = new A();
A objectA = new A();
此方法还创建(或以某种方式获取)实例:

var objectA = B.MethodB();
A objectA = B.methodB();

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

在我看来像是一个静态工厂方法——也就是说,出于各种不同的原因,从不同类中的方法返回对象是很常见的——这就是OOP的全部内容。问题的标签是
Java
(而不是
JavaScript
)。@PM77-1:当我开始写答案时(事实上,根据修订记录,当我写完答案时)它还带有C#标记,这是我在回答中使用的。然后你能在回答中澄清你使用的是
C#
语法吗?顺便说一下,这些都是非常基本的问题,通常在第一节本科编程课上就有。别粗鲁。同样在C#中,公共方法以大写字母开头:)我没有粗鲁。我解释说这些都是基本问题,希望能启发提问者研究CS课程。最后,这个问题用Java标记。我注意到提问者使用我的建议更新了他的问题。我想投票否决这个问题的几个人显然同意我的观点。@dsa42所以不是投票否决基本问题。他的问题很清楚,并有代码示例支持。无需强迫OP知道他/她在问一个简单的问题。如果没有基本的问题,那么就会有一群精英主义的混蛋发布关于“高级编程技术”的问题,而没有任何东西可以提供给新的开发人员。我同意,虽然OP应该考虑一些基本的OOP类或教程。其他人这样做了。在我回答之前,他们否决了这个问题。我所做的只是解释这是一个基本问题,并解释第一个问题是如何不正确的。