2016-08-26 2 views
1

Я хочу наследовать метод в пределах одного класса. Я создал connection(), и я хочу наследовать его от метода remotecmnd(). Я использовал this.connection(), но все еще не получаю. В connection() я указал переменную сокета и переменную dataoutputstream. Но remotecmnd() не может наследовать его. так как я могу с этим справиться?Как наследовать метод внутри одного класса? JAVA

Вот мой 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(); 
} 
} 

Оба метода в одном классе.

+0

«Я хочу, чтобы наследовать метод в одном классе» - Я уверен, что вы действительно хотите сделать что-то другое. Чего вы пытаетесь достичь? 'out' - локальная переменная. Я думаю, вы либо хотите сделать его членом класса, либо вернуть его из метода 'connection()'. – Axel

+0

Прежде всего то, что вы просите, не называется наследованием. Это простой вызов метода, который должен работать. Вы уверены, что это не называется. Попробуйте отладить код и сообщите нам об этом. – Ubercool

+0

Ошибка @Pramod - ошибка: не удается найти символьную переменную out –

ответ

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

спасибо, но его не работает, все еще показывая 'can find find variable variable out' –

+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

Это не наследование. Вы спрашиваете о переносе локальных переменных вызываемого метода в область вызывающего метода, что невозможно в этом случае.

Вы могли бы позволить оба метода использовать одни и те же переменные, что делает его поле

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

Объявите из переменной на уровне класса и создать его экземпляр внутри соединения. Это сработает. Я думаю, что вы уже объявили переменную на уровне класса, но создали еще один метод внутренней связи. Заменить строку в метод соединения с этим

out = new DataOutputStream(cs.getOutputStream()); 
Смежные вопросы