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