黑马程序员技术交流社区

标题: 今天学的类中类有点模糊,里面有我的疑问 [打印本页]

作者: 337091921    时间: 2013-5-7 20:51
标题: 今天学的类中类有点模糊,里面有我的疑问
类中类有什么好处呢?这个例子有点不懂啊


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();
       
        }
}
作者: 淡蓝色    时间: 2013-5-7 21:04
方法体内,在本类的外面就是可以实例化对象的
作者: 白磊    时间: 2013-5-7 21:17
内部类的好处(作用):
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();
        
        }      这一块儿是在一个类的方法体里定义了一个内部类,用药调用表格内部类的方法,当然要在这个时候创建内部类的实例,来调用内部类的方法啊。
作者: ZhaoYuBetter    时间: 2013-5-7 21:25
在一个类内部定义类,这就是嵌套类(nested classes),也叫内部类、内置类。
内部类可以直接访问嵌套它的类的成员,包括private成员,但是嵌套类的成员却不能被嵌套它的类直接访问。

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

作者: zms2100    时间: 2013-5-7 22:43
因为内部类的特性是 内部类(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 22:43
白磊 发表于 2013-5-7 21:17
内部类的好处(作用):
1.内部类可以很好的实现隐藏
  一般的非内部类,是不允许有 private 与protected权 ...

建议换个头像,让大家留下印象
作者: 曹睿翔    时间: 2013-5-7 22:43
ZhaoYuBetter 发表于 2013-5-7 21:25
在一个类内部定义类,这就是嵌套类(nested classes),也叫内部类、内置类。
内部类可以直接访问嵌套它的 ...

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

好的老师,谢谢指导嘿嘿
作者: 兴朗ok    时间: 2013-5-8 19:48
final这个关键字在修饰变量时,会让变量值不能改变,这里则是让内部类中的变量唯一,不能再实例化是被改变

N n = new N();这个是在实例外部类的时候,可以通过调用method的方法,来去直接去完成对N的实例化,来去调用其中的方法。。
作者: 曹睿翔    时间: 2013-5-10 22:37

问题解决请编辑改为已解决,有疑问可以继续追问
作者: 李瑞    时间: 2013-5-11 11:34
1、内部类可以用权限修饰符修饰,可以解决安全问题
2、内部类的出现有效的解决了JAVA中单继承的问题
3、内部类可以共享外部类所有的变量及方法
作者: 曹睿翔    时间: 2013-5-12 09:54
及时更改问题状态,点编辑改为已解决
不修改状态,撤销评分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2