如何在同一个类中继承方法? JAVA

时间:2016-08-26 06:15:51

标签: java inheritance

我想在同一个类中继承一个方法。我创建了一个connection(),我希望从remotecmnd()方法继承它。我使用过this.connection()但仍然没有得到它。在connection()我已经声明了socket变量和dataoutputstream变量。但remotecmnd()无法继承它。那怎么办呢?

这是我的remotecmnd():

public void remotecmnd(){
this.connection();
        shutdn.setOnClickListener(
                new View.OnClickListener() {
                    public String shutdn = "shutdown -s -t 10";
                    @Override
                    public void onClick(View v){
                        try{
                            out.writeBytes(shutdn);
                            Toast.makeText(MainActivity.this, "Shutdown Success", Toast.LENGTH_LONG).show();
                        }
                        catch (Exception e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                }
        );
        restrt.setOnClickListener(
                new View.OnClickListener() {
                    public String rest = "shutdown -r -t 10";
                    @Override
                    public void onClick(View v) {
                        try{
                            out.writeBytes(rest);
                            Toast.makeText(MainActivity.this, "Restart Success", Toast.LENGTH_LONG).show();
                        } catch (UnknownHostException e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                        } catch (IOException e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    }
                }
        );
        lgo.setOnClickListener(
                new View.OnClickListener() {
                    public String logoff = "logoff";
                    @Override
                    public void onClick(View v) {
                        try{
                            out.writeBytes(logoff);
                            Toast.makeText(MainActivity.this, "Logoff Success", Toast.LENGTH_SHORT).show();
                        } catch (UnknownHostException e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                        } catch (IOException e) {
                            Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }
                }
        );
    }

我的连接方法:

public void connection(){
try {
    Socket cs = new Socket("192.168.1.100", 8002);
    DataOutputStream out = new DataOutputStream(cs.getOutputStream());
    if(cs.isConnected())
        Toast.makeText(MainActivity.this, "Connected to Server", Toast.LENGTH_LONG).show();

} catch (UnknownHostException er) {
    Toast.makeText(MainActivity.this, er.getMessage(), Toast.LENGTH_LONG).show();
} catch (IOException er) {
    Toast.makeText(MainActivity.this, er.getMessage(), Toast.LENGTH_LONG).show();
}
}

两种方法属于同一类。

4 个答案:

答案 0 :(得分:1)

这不是继承。您正在询问将被调用方法的局部变量转移到调用方法的范围,这是不可能的。

您可以通过将两个方法设为字段

来允许两种方法使用相同的变量
private DataOutputStream out;

public void remotecmnd(){
    this.connection();
    // access DataOutputStream using this.out or out here
    ...
}

public void connection(){
    try {
        Socket cs = new Socket("192.168.1.100", 8002);
        out = new DataOutputStream(cs.getOutputStream());
        ...

但是,您需要注意以下事实:如果您在connection方法中捕获异常,该字段可能仍为null,这可能会导致NullPointerException。您需要某种方法在remotecmnd方法中进行检查,例如通过不捕捉connection中的例外或重新抛出它们。

另一种选择是从DataOutputStream方法返回connection

public void remotecmnd(){
    final DataOutputStream out = this.connection();
    ...
}

public DataOutputStream connection() {
     ...
     return out;

答案 1 :(得分:0)

您需要从remoteCommand()调用该方法并在方法外声明变量out

这些代码将返回out

public DataOutputStream connection(){
    DataOutputStream out = null;
    try {
        Socket cs = new Socket("192.168.1.100", 8002);
        out = new DataOutputStream(cs.getOutputStream());
        if(cs.isConnected())
            Toast.makeText(MainActivity.this, "Connected to Server", Toast.LENGTH_LONG).show();

    } catch (UnknownHostException er) {
        Toast.makeText(MainActivity.this, er.getMessage(), Toast.LENGTH_LONG).show();
    } catch (IOException er) {
        Toast.makeText(MainActivity.this, er.getMessage(), Toast.LENGTH_LONG).show();
    }
    return out;
}

答案 2 :(得分:0)

您无法覆盖同一类中的方法。  覆盖总是需要继承关系,其中子类型(类/接口)继承父类型(类/接口)中存在的方法,并通过维护相同的签名进行相应的修改。     例如:

class A
{
public void method1()
{
...
...   //some definition

}

}


class B extends A
{
@Override
public void method1()   
{
.....
.....//same or different definition as in parent class A

}


}

答案 3 :(得分:0)

在类级别声明out变量并在连接内实例化它。这会奏效。我认为你已经在类级别声明了变量,但是创建了另一个内部连接方法。 用这个

替换连接方法中的行
out = new DataOutputStream(cs.getOutputStream());