黑马程序员——内部类
来源:互联网 发布:网络举报网站 编辑:程序博客网 时间:2024/06/07 14:06
------- android培训、java培训、iOS培训、.Net培训期待与您交流! ----------
将一个类定义在另一个类的里面,对里面那个类就称为内部类
class Outer //外部类{private int x=3;void method(){System.out.println(x);}class Inner//内部类 ,跟其他类定义一样{void function(){System.out.println("inner:"+x); }}}
内部类的访问规则:
1.内部类可以直接访问外部类中的成员,包括私有
2.外部类要访问内部类必须建立内部类对象
class Outer //外部类{private int x=3;void method(){Inner in=new Inner();in.function();}class Inner//内部类 {void function(){System.out.println("inner:"+x); }}}
直接访问内部类中的成员function
Outer.Inner in=new Outer().new Inner(); //外部类名.内部类名 变量名 = 外部类对象.内部类对象
in.function();
当内部类私有后不能这样访问了,此时内部类在外部类的成员位置上,有可能会将其私有
问:类能不能被private修饰?
能,内部类可以被private修饰,当内部类在外部类成员位置上时
之所以内部类可以直接访问外部类中成员,是因为内部类中持有了一个外部类的引用 格式:外部类名.this
class Outer {private int x=3;void method(){Inner in=new Inner();in.function();}class Inner//内部类 {int x=4;void function(){int x=6;System.out.println("inner:"+x); //打印6System.out.println("inner:"+this.x); //打印4System.out.println("inner:"+Outer.this.x); //打印3}}}
访问格式:
1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象
2.当内部类在成员位置上,就可以被成员修饰符所修饰,如private:将内部类在外部类中进行封装。static:内部类就具备了static的特性,当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限
什么时候写静态内部类?
类中几乎是静态的时候,不涉及特有数据,全共享数据
注意事项:
1.当内部类中定义了静态成员,该内部类必须是static的
2.当外部类中的静态方法访问内部类时,内部类也必须是static的
当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容
内部类只有定义在成员位置上时才能被private或static所修饰,一般内部类是不会被public所修饰,内部类还能定义在类的任意位置上,成员包括局部,局部内部类中不能定义静态成员
内部类定义在局部时:
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量
匿名内部类:
1.匿名内部类其实就是内部类的简写格式
2.定义匿名内部类的前提:继承一个类或者实现接口
abstract class AbsDemo{abstract void show();}class Outer{int x=3;class Inner extends AbsDemo //也可以继承非抽象的{void show() //复写父类的show方法{System.out.println("show:"+x);}}public void function(){new Inner().show();}}
简化成匿名内部类形式
abstract class AbsDemo{abstract void show();}class Outer{int x=3;public void function(){new AbsDemo(){void show(){System.out.println("show:"+x);}}.show();}}
3.匿名内部类的格式:
new 父类或者接口()
{
定义子类的内容;
}
4.其实匿名内部类就是一个匿名子类对象,可以理解为带内容的对象,匿名对象调用方法只能调用一次,
弊端:1)不能直接调用自己方法
2)不能有强转动作
3)若抽象方法很多,用匿名对象全得复写一遍,代码已经没有阅读性,一般写匿名内部类里面方法不超过三个
5.匿名内部类中定义的方法,最好不要超过三个,最好两个或者一个
什么时候用匿名内部类?
当使用的方法参数类型是一个接口类型时,该接口里面方法不超过三个时,可以定义一个匿名内部类,把匿名内部类作为参数传进去
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——java 内部类、匿名内部类
- 黑马程序员—内部类与匿名内部类 异常
- 黑马程序员—内部类、匿名内部类
- 黑马程序员——内部类
- 黑马程序员——内部类, 异常
- 黑马程序员——内部类
- 黑马程序员——内部类
- 黑马程序员 JAVASE——内部类
- 黑马程序员——内部类
- 黑马程序员——内部类
- 黑马程序员——匿名内部类
- 黑马程序员——内部类
- 黑马程序员——内部类
- zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h(redis)
- ORA-19808: recovery destination parameter mismatch
- android简单实现音乐播放器
- Elasticsearch之scroll
- 2015.4.20.21.03_数组_2014.4.20.21.03_ JAVA数组的定义及使用方法_0.03
- 黑马程序员——内部类
- CocoaPods安装和使用教程
- Problem 39—Integer right triangles
- 如何制作ear包
- LS,MMSE,LMMSE,ML,MAP,LMS,AR,MSE误差介绍
- linux常用命令收集
- MFC中使用ActiveX的WebBrowser载入动态网页
- POJ 1385-Binary Stirling Numbers(判断第二类斯特林数的奇偶性)
- Android学习 - 单击事件另两种实现方法