Java 强制在类中执行方法
我正在使用Java,我想从类B中调用类A中的方法f2。可以这样做吗Java 强制在类中执行方法,java,Java,我正在使用Java,我想从类B中调用类A中的方法f2。可以这样做吗 public class A{ private B b = new B(); public void f1(){ b.f3(); } public void f2(){ // do something; } } public class B{ public void f3(){ // Call f2 of class A from here. } } 您需要类B中的A
public class A{
private B b = new B();
public void f1(){
b.f3();
}
public void f2(){
// do something;
}
}
public class B{
public void f3(){
// Call f2 of class A from here.
}
}
您需要类
B
中的A
实例,并在该实例上调用f2
。例如,您可以在f3
的主体中实例化一个:
public class B {
public void f3() {
A a = new A();
a.f2();
}
}
另一种方式是,f3
接收A
的实例:
public class B {
public void f3(A a) {
a.f2();
}
}
还有另一种方法,您可以让B
实例化一个:
public class B {
private final A a;
public B() { this.a = new A(); }
public void f3() {
this.a.f2();
}
}
最后,B
可以在其构造函数中接收一个:
public class B {
private final A a;
public B(A a) { this.a = a; }
public void f3() {
this.a.f2();
}
}
要点是,如果要调用类上的实例方法,必须手头有该类的实例
最后,我注意到您有A.f1
调用B.f3
,您希望从那里调用A.f2
。看来你最好的选择是上面的第二个。即:
public class A {
private final B = new B();
public void f1() { this.b.f3(this); }
public void f2() { /* do something */ }
}
public class B {
public void f3(A a) { a.f2(); }
}
这里的关键是我们正在将
A
的实例传递给B.f3
。我们实现这一点的方法是通过传递this
引用,它是对当前执行实例的引用。在A.f1
中,这将是当前正在执行的A
的实例。在类B
中需要A
的实例,并在该实例上调用f2
。例如,您可以在f3
的主体中实例化一个:
public class B {
public void f3() {
A a = new A();
a.f2();
}
}
另一种方式是,f3
接收A
的实例:
public class B {
public void f3(A a) {
a.f2();
}
}
还有另一种方法,您可以让B
实例化一个:
public class B {
private final A a;
public B() { this.a = new A(); }
public void f3() {
this.a.f2();
}
}
最后,B
可以在其构造函数中接收一个:
public class B {
private final A a;
public B(A a) { this.a = a; }
public void f3() {
this.a.f2();
}
}
要点是,如果要调用类上的实例方法,必须手头有该类的实例
最后,我注意到您有A.f1
调用B.f3
,您希望从那里调用A.f2
。看来你最好的选择是上面的第二个。即:
public class A {
private final B = new B();
public void f1() { this.b.f3(this); }
public void f2() { /* do something */ }
}
public class B {
public void f3(A a) { a.f2(); }
}
这里的关键是我们正在将
A
的实例传递给B.f3
。我们实现这一点的方法是通过传递this
引用,它是对当前执行实例的引用。在A.f1
中,这将是当前正在执行的A
的实例。您必须在类B
中实例化类A
,给定其当前编写的方式,才能对其进行任何方法调用。您必须在类B
中实例化类A
,根据它当前的编写方式,对它进行任何方法调用。您还可以声明f2
静态,并像A.f2()
那样调用它。不过,这类事情在很大程度上取决于类的设计。这里的其他答案也非常有效
public class A{
private B b = new B();
public void f1(){
b.f3();
}
public static void f2(){
// do smthing;
}
}
public class B{
public void f3(){
A.f2();
}
}
您还可以声明
f2
静态并像A.f2()
那样调用它。不过,这类事情在很大程度上取决于类的设计。这里的其他答案也非常有效
public class A{
private B b = new B();
public void f1(){
b.f3();
}
public static void f2(){
// do smthing;
}
}
public class B{
public void f3(){
A.f2();
}
}
您需要一个类A的实例来执行此操作
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A a){
a.f2(); // Call f2 of class A from here.
}
}
这种类型的代码结构通常是混乱的,而不是有用的。我建议改为这样做
public class A{
private B b = new B();
public void f1(){
WhatAf2Needs w = b.f3();
f2(w);
}
public void f2(WhatAf2Needs w){
// do smthing;
}
}
public class B{
public WhatAf2Needs f3(A a){
return WhatAf2Needs;
}
}
您需要一个类A的实例来执行此操作
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A a){
a.f2(); // Call f2 of class A from here.
}
}
这种类型的代码结构通常是混乱的,而不是有用的。我建议改为这样做
public class A{
private B b = new B();
public void f1(){
WhatAf2Needs w = b.f3();
f2(w);
}
public void f2(WhatAf2Needs w){
// do smthing;
}
}
public class B{
public WhatAf2Needs f3(A a){
return WhatAf2Needs;
}
}
如果要调用调用您的对象的方法,必须让调用方使用
this
关键字传入。在代码中,它将是:
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A caller){
caller.f2();
}
}
如果要调用调用您的对象的方法,必须让调用方使用
this
关键字传入。在代码中,它将是:
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A caller){
caller.f2();
}
}
好的,是的,只要你有一个
A
的实例可以调用它……我假设你想调用调用它的实例,而不仅仅是任何A
实例?@Peter Lawrey true。就是so@user1448906:这为您解决了该场景。请看最后一个代码示例。是的,只要您有一个A
实例可以调用它……我假设您想调用调用它的实例,而不仅仅是任何A
实例?@Peter Lawrey true。就是so@user1448906:这为您解决了该场景。请参阅最后一个代码示例。这是不可能的。您可以将其添加到问题中。正如我所说,根据你的课程和程序设计,有很多方法可以做到这一点。这是真的。但是你猜,我已经找到了适合我的解决方案。这是不可能的。你可以把它添加到你的问题中。正如我所说,根据你的课程和程序设计,有很多方法可以做到这一点。这是真的。但是你猜,我已经找到了适合我的解决方案。