我是面向对象编程的初学者,我需要一些答案来解决一些问题。我有一个MainActivity和几个用于不同操作的类。例如,在MainActivity中,我从BluetoothReceiver类创建了一个名称为mBluetoothReceiver的对象。存在用于建立和管理BT连接的方法,例如sendData。在Nmea类中,我获得了一些使用BluetoothReceiver中的方法的方法,因此出于这个原因,我通过了构造函数mBluetoothReceiver。

MainActivity类:

public class MainActivity extends Activity {

    BluetoothService mBluetoothService = new BluetoothService(this);

    //create new object from Nmea class and pass mBluetoothService to mNmea
    Nmea mNmea = new Nmea(mBluetoothService);
}


Nmea类:

public class Nmea {

BluetoothService mBluetoothService;

    //constructor for Nmea for BluetoothServce object
    public Nmea(BluetoothService bluetoothService) {
        mBluetoothService = bluetoothService;
    }

    public Nmea()
    {
    //empty constructor {

    }

    //Nmea methods...
}


我的问题是,我也有GPS类,它也将使用Nmea类中的方法,但是我不知道该怎么做。将空的构造函数放在Nmea类中并在GPS类中创建Nmea对象是可以的吗?如果我不传递BluetoothService对象,蓝牙可能无法正常工作?在GPS类中,我无法创建新的BluetoothService连接对象并将其传递给Nmea构造函数,因为在整个项目中我只需要一个已建立的连接。

GPS类:

public çlass GPS {

Nmea gpsNmea = new Nmea();

//I need to use Nmea methods here

}


我希望你能理解我的问题。用这种东西上班是什么好习惯呢?
谢谢!

最佳答案

您可以这样写:

public class MainActivity extends Activity {
    BluetoothService mBluetoothService = new BlueToothService(this);

    Nmea mNmea = new Nmea(mBluetoothService);

    Gps mGps = new Gps(mNmea);
}


并且您的Gps cconstructor需要看起来像这样:

public class Gps {

    private Nmea mNmea;

    public Gps(Nmea nmea) {
        mNmea = nmea;
    }
}


如果只需要一个BluetoothService类的实例,则需要使用Singleton design pattern编写他,并且Nmea类中所有需要的方法都声明为public

关于java - 对创建对象和使用其方法感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16497021/

10-10 05:59