JAVA问题,创建局部内部类对象可以(外部类对象.new内部局部类)这么写吗?

如何在其他类中使用另一个外部类中的局部内部类中的方法?

    首先,如果你要在外部类中创建内部类对象,直接new就行。

    如果你要在这个外部类之外调用。不好意思必须通过接口调用。

    至于你提的问题,java中好像没这么玩的。下面是我以前学习时候的代码。贴出来你研究下


    public class Outer {
        public static IA test() {
            String addr = "北京";
            class Inner implements IA {
                private int index;
                @Override
                public void fun() {
                    System.out.println("局部内部类的实例方法被调用,访问类中实例属性 index=" + index);
                }
                public Inner(int index) {
                    this.index = index;
                }
            }
            Inner inner = new Inner(100);
            return inner;
        }

    public interface IA {
        //接口中必须有你要从外界调用的方法;
        void fun();
    }

    public class test {

public static void main(String[] args) {
//正确的调用方法,另该内部类实现某接口(接口中必须有你要调用的方法),通过接口类型调用方法:
//能调用到局部内部类中的方法,自然也就能通过方法访问外部类对象了
IA ia = Outer.test();
ia.fun();
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-23
你说的是可行的。。
这是我的测试代码:
public class tt2 {
public class A{
public class B{

}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
tt2 tt = new tt2();
A a = tt.new A();
A.B b = a.new B();
}
}本回答被网友采纳
第2个回答  2012-10-23
不能 局部内部类 它的访问范围与局部变量一样;局部变量 你能这样调用么;除非是内部类
内部类就可以这样调用
第3个回答  2012-10-23
不知道你说是不是这样子的:

package com.chat.client;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import com.chat.bean.MessageBean;
public class Client {
private JFrame f;
private JTextArea text;
private JScrollPane sp;
private JTextField msg;
private JButton btn;
private JPanel p;

private Socket s;
private ObjectOutputStream oos;

public Client(){
init();
initClient();
}

public void initClient(){
try{
s = new Socket("127.0.0.1",8888);
oos = new ObjectOutputStream(s.getOutputStream());
new ClientThread().start();
}catch(Exception e){
e.printStackTrace();
}
}

public void init(){
f = new JFrame("Client");
text = new JTextArea();
sp = new JScrollPane(text);
msg = new JTextField();
btn = new JButton("Send");
p = new JPanel();
p.setLayout(new BorderLayout());
p.add(msg,BorderLayout.CENTER);
p.add(btn,BorderLayout.EAST);
f.add(sp,BorderLayout.CENTER);
f.add(p,BorderLayout.SOUTH);
f.setSize(500, 400);
f.setVisible(true);

f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
MessageBean bean = new MessageBean();
bean.setIpAddress(InetAddress.getLocalHost().getHostAddress());
bean.setMessage(msg.getText());
oos.writeObject(bean);
oos.flush();
}catch(Exception e1){
e1.printStackTrace();
}
msg.setText("");
}
});
}

class ClientThread extends Thread{
private ObjectInputStream ois;
private String key = "key";
public ClientThread(){
try {
ois = new ObjectInputStream(s.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
public void run(){
while(true){
try{
MessageBean bean = (MessageBean)ois.readObject();
synchronized(key){
text.append(bean.getIpAddress()+"\n");
text.append(bean.getMessage()+"\n");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}

public static void main(String[] args) {
new Client();
}
}
第4个回答  2012-10-23
你内部类对象是应该有在外部类使用吧?
那么,直接构造一个成员属性即可,指向内部类,然后在另一个类中,调用外部类,再调用外部类中声明的内部类属性,再去调用内部类方法。
相似回答