JAVA问题,创建局部内部类对象可以(外部类对象.new内部局部类)这么写吗?
9个回答
展开全部
首先,如果你要在外部类中创建内部类对象,直接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();
}
}
展开全部
你说的是可行的。。
这是我的测试代码:
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();
}
}
这是我的测试代码:
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();
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能 局部内部类 它的访问范围与局部变量一样;局部变量 你能这样调用么;除非是内部类
内部类就可以这样调用
内部类就可以这样调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你说是不是这样子的:
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你内部类对象是应该有在外部类使用吧?
那么,直接构造一个成员属性即可,指向内部类,然后在另一个类中,调用外部类,再调用外部类中声明的内部类属性,再去调用内部类方法。
那么,直接构造一个成员属性即可,指向内部类,然后在另一个类中,调用外部类,再调用外部类中声明的内部类属性,再去调用内部类方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询