【问题标题】:instantiation of objects of other classes in java [closed]java中其他类的对象的实例化[关闭]
【发布时间】:2014-03-16 09:54:18
【问题描述】:

我有这种情况:

public class Number {
int num;
private TakeNumber take = null;

public Number() {
    num = 5;
}

public void print() {
    take.doSomething();
}

public int getNumber() {
    return num;
}

public static void main(String[] args) {
    new Number();
  }
}

public class TakeNumber {
private Number number = new Number();

public void doSomething() {
    System.out.println(number.getNumber());

   }
}

现在,谁能解释一下这些情况:

  • 我想知道编译器在这里解释了什么:private Number number = new Number();

  • 初始化有问题的对象并传递所需的方法

  • 将一个对象初始化为null然后对该对象调用函数是正确的,如图

简述

我想知道你是否可以调用另一个类的一个类的方法:

  1. 不需要静态函数

  2. 重要不要继承类,因为我想使用这些类的方法,例如:

    • 我的类在概念上与 Tomato 和 machine 不同,我会将 Machine 的方法称为 Tomato

【问题讨论】:

  • 您在一个问题中要问的东西太多,而且它们分散在您的问题中。我建议您重新措辞和重新格式化您的问题,使其更易于理解并获得更多答案。
  • 我知道,但是我想非常清楚我的观点,为同样的问题提出更多的问题,会让我更加自信,我理解回答者的困难。
  • 至少,把你问题底部的所有问题都收集起来,让回答者更容易理解你想知道的内容。
  • "现在,谁能解释一下为什么因为这些情况没有给出错误但不打印数字?" - 因为在所有三种情况下都不会调用 print() 方法。如果你调用它,你会得到 NullPointerException 因为 take 变量没有被初始化。
  • 我忘记在 main 中插入 print() 的调用,是的,但主要问题是另一个问题。

标签: java oop object


【解决方案1】:

我想知道你是否可以调用另一个类的一个类的方法:

不需要静态函数

如果方法不是static,那么您将需要该对象的实例来调用它。

Object o = new Object();
o.doSomething();

是您访问实例方法的方式。

我有一些在概念上与番茄和机器不同的类,我会将机器的方法称为番茄

这很好。这称为composition。组合是类之间的has a 关系。一个类Manhas aCar,但是Is aPerson。正如您所展示的那样编写代码是完全有效的。这就是您如何使用组合来仅公开您想要的组合对象的接口。比如……

public class MyClass extends MyOtherClass

现在你刚刚暴露了MyOtherClass的整个界面。这可能不是我们想要的。

public class MyClass {
    MyOtherClass otherClass;

    public void doSomething() {
        otherClass.doSomething();
    }
}

现在,您只公开了doSomething() 方法。正如您所说,当您的对象在概念上不同但需要一些共享功能时,这很有用。这是一个完全有效的代码实践。

注意:鉴于您的问题令人困惑,我想我遗漏了一些内容,因此请发表评论并进行所需的修改。

【讨论】:

  • "现在,您只公开了 doSomething() 方法。正如您所说,当您的对象在概念上不同但需要一些共享功能时,这很有用。这是一个完全有效的代码实践。”这句话打开了一个水平:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多