我想在同一个类中继承一个方法。我创建了一个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();
}
}
两种方法属于同一类。
答案 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());