黑马程序员技术交流社区
标题: 内部类作用什么?在什么地方用?为了解决什么问题?怎... [打印本页]
作者: cain 时间: 2014-6-7 23:37
标题: 内部类作用什么?在什么地方用?为了解决什么问题?怎...
内部类作用什么?在什么地方用?为了解决什么问题?怎么用最好?
作者: cain 时间: 2014-6-7 23:44
求大神指点
作者: 王琪 时间: 2014-6-8 01:16
本帖最后由 王琪 于 2014-6-8 02:09 编辑
这么晚了,不休息啊?内部类就像内部的一个模块,方便对属性和方法进行封装
作者: zly1992008 时间: 2014-6-8 08:20
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。
*内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。
注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。
1. 成员内部类成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。
2. 局部内部类 局部内部类,是指内部类定义在方法和作用域内。
3. 嵌套内部类 嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系
嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。
4. 匿名内部类 有时候为了免去给内部类命名,便倾向于使用匿名内部类,因为它没有名字。
内部类说来话长。。楼主要见到例子才能理解,回复篇幅有限,我就不写例子了。见到一次理解一次就行~
作者: ☆枫の云 时间: 2014-6-8 08:55
本帖最后由 ☆枫の云 于 2014-6-8 08:56 编辑
学到后面你就会有了解了,学GUI的时候就用到了内部类,我只知道这一个作用,就是如果想实现一个抽象类中的方法又不想继承时就可以用。
- abstract class A
- {
- void func1(){};
- }
- //第一种方式:内部类,内部类相当于父类的子类对象。
- class B
- {
- void func3(){
- void func2(new A(){
- void func1(){
- //实现内容;
- }
- }.func1();
- }
- }
- //第二种方式:继承
- class B extends A
- {
- void fun1(){
- //实现内容;
- }
- void fun2(){
- new B().fun1();
- }
- }
复制代码
作者: 路漫漫_求索 时间: 2014-6-8 20:03
1. 内部类的作用是什么?在什么地方用?
* 当描述事物时,事物的内部还有事物,该事物用内部类来描述。
* 因为内部事物可以直接访问外部事物的内容。
*
* 举例:人体
* 人体里面包含心肝脾肺肾
*
* 人体:是一个外部类
* |--包含心脏跳动的方法
* |--包含肺的活动方法
*
* 心脏:是一个内部类
* |--包含左心房的方法
* |--包含右心房的方法
*
*
* class Body
* {
* privateclass XinZang //内部类定义时,最好将其私有,不对外暴露
* {
* voidshow TiaoDong(){}
* }
*
* //对钱提供方法,来访问内部事物
* publicvoid show()
* {
* newXinZhang().TiaoDong(); 创建心脏对象 ,并访问跳动方法
* }
* }
2. 为了解决什么问题?
* ---------------------------------------
* 把心脏定义在人体里面,这样符合自然规律。心脏可以直接在内部访问人体内的方法。
* 如果定义在外面,心脏还要创建人体的对象,然后才可以访问人体的方法,
class Oute{
private static int x =3;
static class Inner{ //静态内部类
static void function(){
System.out.println("Inner:" + x);//可以直接访问外部类静态成员变量
}
}
static class Inner2{
void method(){
System.out.println("inner2.show");
}
}
public static void show(){
new Inner2().method();//外部类静态方法访问内部类时,内部类也必须是静态的。
}
}
public class _Inner_static {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Oute.Inner().function();//在外部其他类中,访问内部类的非静态成员
Oute.Inner.function();//在外部其他类中,访问内部类的静态成员
new Oute().show();//调用外部类方法
}
}
希望能对你有帮助。。。。
作者: 、海 时间: 2014-6-8 20:10
学习学习!
作者: xiazhixing 时间: 2014-6-8 20:20
没看明白。。
作者: 谭荣强 时间: 2014-6-8 22:10
又是你,又问这些总结性的问题
作者: 葛晓东 时间: 2014-6-8 22:22
好牛掰 好齐全 啊。学了不少,这里面用的最多的还是匿名内部类吧
作者: superob123 时间: 2014-6-8 22:50
内部类别想那么复杂,它就是一个成员,用成员的规程去看待它就可以了
作者: 阿布Yocan 时间: 2014-6-9 11:33
我也是发现了在学GUI时,加载监听器的时候,用到了匿名内部类
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |