java中其他类对象的实例化

java中其他类对象的实例化,java,oop,object,Java,Oop,Object,我有这样的情况: 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 N

我有这样的情况:

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=new Number()

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

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

简言之

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

  • 没有所需的静态功能

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

    • 我有概念上不同的类,比如西红柿和机器,我将把机器的方法称为西红柿
  • 我想知道您是否可以调用另一个类的类的方法:

    没有所需的静态功能

    如果方法不是静态的,则需要该对象的实例来调用它

    Object o = new Object();
    o.doSomething();
    
    是访问实例方法的方式

    我有概念上不同的类,比如西红柿和机器,我会把机器的方法称为西红柿

    这很好。这被称为
    合成
    。组合是一个类之间有关系的
    。类
    有类
    ,但
    是类
    。正如您所示,编写代码是完全有效的。这就是如何使用合成来仅公开所需的复合对象的接口。例如

    public class MyClass extends MyOtherClass
    
    现在您已经公开了MyOtherClass的整个接口。这可能并不理想

    public class MyClass {
        MyOtherClass otherClass;
    
        public void doSomething() {
            otherClass.doSomething();
        }
    }
    
    现在,您只公开了
    doSomething()
    方法。正如您所说,当您的对象在概念上不同,但需要一些共享功能时,这非常有用。这是一个完全有效的代码实践


    注意:鉴于你的问题令人困惑,我想我遗漏了一些内容,因此请用所需的编辑进行评论。

    你在一个问题中提出的问题太多了,它们分散在你的问题中。我建议你重新措辞,重新编排你的问题,让它更容易理解,得到更多的答案。我知道,但我想非常清楚我的观点,为同样的问题提出更多的问题,会让我更具对抗性,我理解回答者的困难。至少,收集问题底部的所有问题,让回答者更容易理解您想知道的内容。“现在,有人能解释一下为什么这些情况不会给出错误,但不会打印数字吗?”-因为在所有三种情况下都不会调用print()方法。如果你调用它,你会得到NullPointerException,因为take变量没有初始化。我忘了在main中插入print()的调用,是的,但主要问题是另一个。“现在,你只公开了doSomething()方法。正如您所说,当您的对象在概念上不同,但需要一些共享功能时,这非常有用。这是一个非常有效的代码实践。”这句话打开了一个地平线:D