A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

类中类有什么好处呢?这个例子有点不懂啊


class Java2
{
        public static void main(String []args){
       
                M m=new M();
                m.method();
       
        }
}
class M
{
        public void method(){
        final  int m=10;//z这为什么要用final
         class  N
         {
                 public void show(){
                 
                 
                 System.out.println(m);
                 }
         }
         N n=new N();//问什么在这实例化对象。
         n.show();
       
        }
}

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

13 个回复

倒序浏览
方法体内,在本类的外面就是可以实例化对象的
回复 使用道具 举报
内部类的好处(作用):
1.内部类可以很好的实现隐藏
  一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。
4.可以避免修改接口而实现同一个类中两种同名方法的调用。

final  int m=10;//z这为什么要用final        这里用final就是定义一个常量。

public void method(){
        final  int m=10;//z这为什么要用final
         class  N
         {
                 public void show(){
                 
                 
                 System.out.println(m);
                 }
         }
         N n=new N();//问什么在这实例化对象。
         n.show();
        
        }      这一块儿是在一个类的方法体里定义了一个内部类,用药调用表格内部类的方法,当然要在这个时候创建内部类的实例,来调用内部类的方法啊。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
在一个类内部定义类,这就是嵌套类(nested classes),也叫内部类、内置类。
内部类可以直接访问嵌套它的类的成员,包括private成员,但是嵌套类的成员却不能被嵌套它的类直接访问。

final:
内部类N的对象 n 生命期会超过局部变量 m;所以要定义为 final 的。final为一个常量
final定义的局部变量是个常量,它的生命周期超出方法运行的生命周期。
N n=new N();//问什么在这实例化对象。 这个是new 了一个 N 的对象啊。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1

查看全部评分

回复 使用道具 举报
因为内部类的特性是 内部类(Class N )是可以访问外部类的变量,而外部类是不能直接访问内部类中的成员(变量、方法: 代码中的专门创建对象后的 n.show();就是这个原因)。
PS:  附送一个小知识点,O(∩_∩)O~,我也是最近才发现的,(因为之前很少在主函数调用本类方法,或经常把本类方法定义成static的):
如果你要在主函数(主函数是静态的,被static 修饰)中调用本类中的非静态方法或非静态变量,那么你甚至可以在主函数中创建本类的对象。
例如:  Class Demo{       public static void main(String[] args){         Demo d = new Demo();    //然后就能直接通过 d 去调用本类Demo中的非静态方法。}    }
(当然不建议经常用,至于坏处应该就是在内存中占用空间,至于占用多少就不清楚了,本类中方法特别多时 , 可能比你把它弄成static 还要占用内存空间)
可能最多就是访问的方法不能或定义为static时 需要改动很多时使用。
回复 使用道具 举报
白磊 发表于 2013-5-7 21:17
内部类的好处(作用):
1.内部类可以很好的实现隐藏
  一般的非内部类,是不允许有 private 与protected权 ...

建议换个头像,让大家留下印象
回复 使用道具 举报
ZhaoYuBetter 发表于 2013-5-7 21:25
在一个类内部定义类,这就是嵌套类(nested classes),也叫内部类、内置类。
内部类可以直接访问嵌套它的 ...

建议换个头像,让大家留下印象
回复 使用道具 举报
盯你好久了
建议换个头像,让大家留下印象
回复 使用道具 举报
      final  int m=10;//z这为什么要用final
                  因为用final定义一个常量,这个常量的值就不能被改变了。
    N n=new N();//问什么在这实例化对象。
                  在这调用是因为下面n要调用show()方法;
回复 使用道具 举报
曹睿翔 发表于 2013-5-7 22:44
盯你好久了
建议换个头像,让大家留下印象

好的老师,谢谢指导嘿嘿
回复 使用道具 举报
final这个关键字在修饰变量时,会让变量值不能改变,这里则是让内部类中的变量唯一,不能再实例化是被改变

N n = new N();这个是在实例外部类的时候,可以通过调用method的方法,来去直接去完成对N的实例化,来去调用其中的方法。。
回复 使用道具 举报

问题解决请编辑改为已解决,有疑问可以继续追问
回复 使用道具 举报
1、内部类可以用权限修饰符修饰,可以解决安全问题
2、内部类的出现有效的解决了JAVA中单继承的问题
3、内部类可以共享外部类所有的变量及方法
回复 使用道具 举报
及时更改问题状态,点编辑改为已解决
不修改状态,撤销评分
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马