java - 如何继承同一个类中的方法? java

标签 java inheritance

我想继承同一个类中的方法。我创建了一个 connection(),并且我想从 remotecmnd() 方法继承它。我已经使用了 this.connection() 但仍然没有得到它。在connection()中,我声明了套接字变量和dataoutputstream变量。但remotecmnd()不能继承它。那么我该怎么办呢?

这是我的remotecmd():

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();
}
}

这两种方法都在同一个类中。

最佳答案

这不是继承。您询问的是如何将被调用方法的局部变量传输到调用方法的范围,但这种方式是不可能的。

您可以通过将其设为字段来允许两种方法使用相同的变量

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,这可能会导致 空指针异常。您需要某种方法在 remotecmnd 方法中检查这一点,例如通过不捕获连接中的异常或重新抛出异常。

<小时/>

另一个选项是从 connection 方法返回 DataOutputStream:

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

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

关于java - 如何继承同一个类中的方法? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159493/

相关文章:

c++ - 如何用派生基类替换基类

java - Pattern.matches 不起作用,而 replaceAll 起作用

java - 在不传递 Class<T> 参数的情况下找出 T.class

javascript - Dojo 无参数构造函数调用带参数的基础构造函数

c++ - C++ 中的多态性和虚函数

oop - Dlang : why are constructors not inherieted?

inheritance - Salesforce Apex 是否支持静态方法的继承?

java - 不允许在调用 super 构造函数时使用实例变量和方法

java - Selenium cssSelector 在 IDE 中有效,但在 Webdriver 中无效

java - 斯坦福自然语言处理 (StanfordNLP) 词形还原无法处理 -ing 单词