2016-08-26 12 views
1

私は同じクラス内のメソッドを継承したいです。 connection()を作成しました。これをremotecmnd()メソッドから継承したいと考えています。私はthis.connection()を使用しましたが、まだそれを取得していません。 connection()では、私はsocket変数とdataoutputstream変数を宣言しました。しかし、remotecmnd()はそれを継承することはできません。だからどうしたらいいの?同じクラス内でメソッドを継承する方法は? JAVA

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

両方のメソッドが同じクラスである

は、ここに私のremotecmnd()です。

+0

「私は同じクラス内でメソッドを継承したい」 - 私はあなたが本当にやりたいことは何か他のものであることを確信しています。あなたは何を達成しようとしていますか? 'out'はローカル変数です。私はそれをクラスのメンバーにするか、 'connection()'メソッドから返すかのどちらかと思っています。 – Axel

+0

まず最初に、あなたが求めていることは継承と呼ばれていません。これはうまくいくはずの簡単なメソッド呼び出しです。それが呼び出されていないと確信していますか?コードをデバッグしてお知らせください。 – Ubercool

+0

@Pramodエラーは 'error:シンボル変数を見つけることができません ' –

答えて

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; 
} 
+0

ありがとうが、まだ動作していない、 'シンボル変数を見つけることができません ' –

+0

接続が確立されていますか?ログを追加してチェックします。 – Archana

+0

変数 'out'は、接続メソッド内でのみアクセスできます。だからあなたのメソッドの外に宣言し、クラス内 – Archana

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 

} 


} 
1

これは継承ではありません。あなたは呼び出されたメソッドのローカル変数を呼び出しメソッドのスコープに転送することを頼んでいますが、これはこのようにはできません。あなたは事実を認識する必要がありますしかし、あなたがconnectionメソッドで例外をキャッチした場合、フィールドはまだことの両方の方法は、それフィールド

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

ことによって、同じ変数を使用する可能性があります

nullとなり、NullPointerExceptionになる可能性があります。 remotecmndメソッドでこれを確認する方法が必要です(例: connectionに例外をキャッチしないか、またはそれらを再スローすることによって。

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

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

は、クラスレベルでアウト変数を宣言し、接続内でそれをインスタンス化:


別のオプションはconnection方法からDataOutputStreamを返すことになります。これは動作します。クラスレベルで変数を宣言したが、別の内部接続メソッドを作成していると思います。 との接続方法で行を置き換え、この

out = new DataOutputStream(cs.getOutputStream()); 
関連する問題