黑马程序员技术交流社区
标题:
代码求解?
[打印本页]
作者:
冯国强
时间:
2013-12-18 12:28
标题:
代码求解?
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义类B对象,并调用类B中的方法func
A.B b=new A。B();
b.func();
}
}
//定义类A
class A{
int x=1;
//定义内部类B
class B{
int x=2;
void func()
{
int x=3;
System.out.println(x);//输出B类方法func中的变量x
System.out.println(this.x);//输出B类中的公有变量x
System.out.println(A.this.x);//输出A类中的公有变量x
}
}
}
在主函数中实例化对象时报错,为什么?
作者:
发哥-阿花
时间:
2013-12-18 12:40
我想你的错是格式上的问题,如下:
A.B b = new A().new B();
复制代码
对比一下你的创建对象的格式,你就懂了
作者:
375798258
时间:
2013-12-18 12:43
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义类B对象,并调用类B中的方法func
A.B b=new A().new B();
b.func();
}
}
//定义类A
class A{
int x=1;
//定义内部类B
class B{
int x=2;
void func()
{
int x=3;
System.out.println(x);//输出B类方法func中的变量x
System.out.println(this.x);//输出B类中的公有变量x
System.out.println(A.this.x);//输出A类中的公有变量x
}
}
}
作者:
公子-醉香
时间:
2013-12-18 12:49
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义类B对象,并调用类B中的方法func
A.B b=new A(). new B();//错误分析:不管是内部类 还是普通类 只要不是static修饰,要调用它里面的方法的时候,都需要每一个实例化出一个它的对象
//A.B b=new A.B();这种语法不存在在java语言中,我想其他语言中估计也没有吧
b.func();
}
}
class A{
int x=1;
//定义内部类B
class B{
int x=2;
void func()
{
int x=3;
System.out.println(x);//输出B类方法func中的变量x
System.out.println(this.x);//输出B类中的公有变量x
System.out.println(A.this.x);//输出A类中的公有变量x
}
}
}
复制代码
作者:
taoge
时间:
2013-12-18 12:54
楼上正解
作者:
taoge
时间:
2013-12-18 12:56
new A().B()一看后面的B()以为是A类中的一个方法
作者:
Kyle
时间:
2013-12-18 13:48
板凳基本说的都对,但有一点我不赞同
//A.B b=new A.B();这种语法不存在在java语言中,我想其他语言中估计也没有吧
这种语法在Java当中是存在的。
当B被静态关键字修饰的时候,就可以用这种方式创建内部类对象。
代码验证如下:
public class Test {
public static void main(String[] args) {
// 定义类B对象,并调用类B中的方法func
A.B b = new A.B(); //被静态修饰过的内部类,用这种方式来创建对象
b.func();
}
}
class A {
int x = 1;
// 定义内部类B,并用static修饰
static class B {
int x = 2;
void func() {
int x = 3;
System.out.println(x);// 输出B类方法func中的变量x
}
}
}
复制代码
作者:
恨死我了
时间:
2013-12-18 14:17
如果内部类未声明为static,在实例化时首先需要new一个外部类的对象。并通过new A().new B()的方式new 内部类,表明这个内部类指向该外部类。内部类的class类型为:A.B。
静态内部类与普通内部类的区别在于,静态内部类的对象是不指向与某个具体的外部类对象,所以在创建对象时不需要创建外部类对象。并且在new的时候是通过 new A.B()方式。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2