Java中直接创建一个内部类对象的时候为什么要导入类
比如这段代码//importcn.dream.oop.test.innerclass.Face.Nose;publicclassOuterClass{publicstat...
比如这段代码
//import cn.dream.oop.test.innerclass.Face.Nose;
public class OuterClass {
public static void main(String[] args) {
// Face f = new Face();
// Nose n = f.new Nose(); //必须导入该类
Face.Nose fn = new Face().new Nose(); //不需要导入类
}
}
class Face{
int type;
public class Nose{
String type;
void breath(){
System.out.println("呼吸!!");
}
}
}
直接创建一个内部类为什么需要导入Nose类呢?
Face f = new Face();
Nose n = f.new Nose();
不是,各位,你们没看懂问题。
我问的不是Nose n = f.new Nose();之前为什么要Face f = new Face();这个原因我知道。
我问的是://import cn.dream.oop.test.innerclass.Face.Nose;为什么要有这个导入? 展开
//import cn.dream.oop.test.innerclass.Face.Nose;
public class OuterClass {
public static void main(String[] args) {
// Face f = new Face();
// Nose n = f.new Nose(); //必须导入该类
Face.Nose fn = new Face().new Nose(); //不需要导入类
}
}
class Face{
int type;
public class Nose{
String type;
void breath(){
System.out.println("呼吸!!");
}
}
}
直接创建一个内部类为什么需要导入Nose类呢?
Face f = new Face();
Nose n = f.new Nose();
不是,各位,你们没看懂问题。
我问的不是Nose n = f.new Nose();之前为什么要Face f = new Face();这个原因我知道。
我问的是://import cn.dream.oop.test.innerclass.Face.Nose;为什么要有这个导入? 展开
4个回答
展开全部
java中直接创建一个内部类对象导入外部类,可以访问私有属性,进行封装,防止外界破坏。
内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量。在设计时提供了更多的思路和捷径。要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java 编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部 类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。
内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量。在设计时提供了更多的思路和捷径。要想实现这个功能,内部类对象就必须有指向外部类对象的引用。Java 编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部 类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。
展开全部
Nose是Face的非静态内部类 既然是非静态 在使用前 必须要有其对象才能使用 所以先创建Face的对象 再用该对象 创建 Nose对象
追问
你说的我知道。
我问的是://import cn.dream.oop.test.innerclass.Face.Nose;为什么要有这个导入?
追答
你这两个类有没有在 同一个包里? 这个导入前面有没有 警告? 有警告的话证明这个代码 没用的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在创建实例内部类的实例时,外部类的实例必须存在
对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
http://zhidao.baidu.com/link?url=GBIGPogjxWpqPGI74z7Nt8cy1uoW4mQUU7imba4gAvklwEG5I03J19Y7yEBz9TVZo4iWRLjcN3m1_QZkZ4Fz-a
对main方法而言,虽然写在类中,它是游离于任何类之外的(就跟C++一样,单独一个main方法),因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问
http://zhidao.baidu.com/link?url=GBIGPogjxWpqPGI74z7Nt8cy1uoW4mQUU7imba4gAvklwEG5I03J19Y7yEBz9TVZo4iWRLjcN3m1_QZkZ4Fz-a
更多追问追答
追问
你说的我知道。
我问的是://import cn.dream.oop.test.innerclass.Face.Nose;为什么要有这个导入?
追答
Nose n = f.new Nose();
因为这个, Nose 这个类是内部类,不导入的话IDE找不到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
亲,他不得先找到Face才能找到其里边的Nose吗?
更多追问追答
追问
你说的我知道。
我问的是://import cn.dream.oop.test.innerclass.Face.Nose;为什么要有这个导入?
追答
那不是2个类吗?一个类调另一个你总得导人家所在的包吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询