黑马程序员技术交流社区
标题:
【已解决】 java中内部类跟外部类
[打印本页]
作者:
黑马王楠
时间:
2012-9-3 10:01
标题:
【已解决】 java中内部类跟外部类
本帖最后由 黑马王楠 于 2012-9-3 10:23 编辑
都有什么区别,什么时候该有static
作者:
孔德智
时间:
2012-9-3 10:10
简单的说,所谓内部类,其实就是定义在类中的类!内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。内部类作为其外部类的一个成员,与其他成员一样,可以直接访问其外部类的数据和方法。只不过相比较外部类只有public和默认的修饰符不同,内部类作为一个成员,可以被任意修饰符修饰。
但内部累定义在局部时不能被成员修饰符修饰,也不能访问他所在局部中的变量,只能访问被final修饰的局部变量。
当内部累定义了静态成员时,这个内部累是要加static的。当外部类中的静态方法访问内部类时,内部类也是static的。
作者:
小黑马
时间:
2012-9-3 10:11
外部类,内部类,匿名类,外部类就是两个类并列的
class A {
}
class B {
},
内部类:
class A {
class B {}
},
第一:B可以直接使用包涵它的类的成员变量,内部类不能被除包涵类以外的类调用;
第二:还有就是匿名类,也是内部类 classA{new {}}省略定义类名直接定义方法和使用,这个适用于代码比较简单且这个类不需要被其他类调用
这一块说起来简单,用起来复杂,需要你自己去上网找资料
作者:
程有愿
时间:
2012-9-3 10:12
内部类的访问规则:内部类可以直接访问外部类中 的成员包括私有
外部类要想访问内部类就必须建立内部类的对象
访问格式:内部类在外部类的成员位置上,并没有被私有,如果想要在其他的外部类建立内部类的对象
外部类名.内部类名 变量名=外部类对象.内部类对象
Outer.Inner i1=new Outer().new Inner();
内部类在外部类的成员位置上,可以被成员修饰符所修饰
比如 private 将内部类对其他外部类进行封装
static 内部类能被静态修饰变成静态内部类,具有静态属性
并只能访问外部类中的静态成员了,出现了访问局限
1: 那么在其他外部类中怎么直接访问内部静态类中的非静态成员呢呢?
new Out.Inner().function();
2:那么如何在其他外部类中访问内部静态类中的静态成员呢?
Out.Inner.function();
如果内部内中有静态成员,那么该内部类必须定义为静态类
当外部内中的静态成员访问内部类中的成员时,内部类必须也要定义为static
作者:
何要民
时间:
2012-9-3 10:13
内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。
假设一个public方法不是静态的 那么你必须实例化才能访问到这个方法
假设一个案例 电影院一个电影的票数 如果你不用静态的话 那么一个柜台实例化一个票数的变量 那么A柜台实例化默认100 卖出10张 应该还剩下90张 但是在B柜台上看 票数还是100张 如果用静态的话 那么A卖了10张 那么B刷新一下 就编程90张了 简单说如果你的多个实例需要用的同一个数据的话 那个数据最好用静态变量来保存 当然了 静态变量也不需要实例化才能访问的
作者:
孙沛
时间:
2012-9-3 10:14
首先,内部类就是在一个(外部)类中再定义一个类,但是,有一点,所有使用内部类的地方都可以不用内部类同样解决问题,只是为了使程序更加简介,便于命名规范和划分层次结构,可以在类中再次定义类,即引入内部类进行对方法的封装。
其次,内部类可以理解是作为外部类的一个成员,它依附于外部类而存在的。内部类可以为静态(内部类可以有静态属性,前提是必须是静态内部类)。可以用protect和private修饰,而外部类只能用public和default修饰。
内部类又分为:成员内部类,局部内部类,静态内部类,匿名内部类。
成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。
局部内部类:在方法中定义的内部类称为局部内部类。
静态内部类:静态内部类定义在类中 ,在任何方法之外,用 static 修饰。 静态内部类只能访问外部类的静态成员。
匿名内部类:匿名内部类就有点特殊了,通过匿名类实现。另外你们内部类是唯一一种没无构造方法的类。
作者:
黑马王楠
时间:
2012-9-3 10:22
谢谢大家的热情解答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2