黑马程序员——匿名内部类
来源:互联网 发布:淘宝数据中心没有 编辑:程序博客网 时间:2024/04/29 08:33
---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------
内部类访问规则:
* 1,内部类可以直接访问外部类中的成员,包括私有。
* 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用
* (格式:外部类外.this)
相当于孙悟空要访问牛摩王的心脏,如果孙悟空在牛魔王的身体里,就可以直接访问了
* 2,外部类要访问内部类,必须建立内部类对象。
*
* 访问格式:
* 1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其它类中。
* 可以直接建立内部类对象。
* 格式:
* 外部类外.内部类名 变量名= new外部类().new内部类();
* Outer.Inner in = new Outer().new Inner();
* 解析上面代码:Outer.Inner就是访问Outer对象的内部类
* 2.当内部类在成员位置上,就可以被成员修饰符所修饰
* 比如,private:将内部类在外部类中封装。
* Static:内部类就具备static特性。
* 当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限
*
* 在外部其他类中,如何访问内部类的非静态成员呢?
* newOuter.Inter().Show();
*
* 在外部其他类中,如何访问内部类的静态成员呢?
* Outer.Inter().Show();
*
* 注意:当内部类中有static定义了静态成员变量,该内部类也必须是静态的。static
* 当外部类中静态方法访问内部类时,内部类也必须是static静态的。
*/
class Outer{ private int x = 3; class Inner { void Show() { int x = 3; System.out.println("内部类"+Outer.this.x); } } static class Inter //静态内部类 { void Show() { int x = 3; System.out.println("静态内部类"+x); } } void method() { Inner in = new Inner(); in.Show(); } //访问内部类的方法:失败 public void Insert() { new Outer().Insert(); System.out.println("当外部类中静态方法访问内部类时,内部类也必须是static静态的。"); }}public class _01内部类 { public static void main(String[]args) { Outer o = new Outer(); o.method(); //直接访问内部类中的成员 Outer.Inner in = new Outer().new Inner(); in.Show(); //静态访问内部类方法(因为没有访问具体成员变量,所以可以直接通过类名调用) new Outer.Inter().Show(); //--------------------------------- o.Insert();//访问内部类时,内部类也必须是static静态的。 } }
内部类定义规则
/*
*当描述事物时,事物的内部还有事物,该事物用内部类来描述。
* 因为内部事物可以直接访问外部事物的内容。
*
* 举例:人体
* 人体里面包含心肝脾肺肾
*
* 人体:是一个外部类
* |--包含心脏跳动的方法
* |--包含肺的活动方法
*
* 心脏:是一个内部类
* |--包含左心房的方法
* |--包含右心房的方法
*
*
* class Body
* {
* privateclass XinZang //内部类定义时,最好将其私有,不对外暴露
* {
* voidshow TiaoDong(){}
* }
*
* //对钱提供方法,来访问内部事物
* publicvoid show()
* {
* newXinZhang().TiaoDong(); 创建心脏对象,并访问跳动方法
* }
* }
* ---------------------------------------
* 把心脏定义在人体里面,这样符合自然规律。心脏可以直接在内部访问人体内的方法。
* 如果定义在外面,心脏还要创建人体的对象,然后才可以访问人体的方法,
*
* 为什么要把内部类私有呢?
* 心脏如果直接被别人访问,就会很受伤。所以将其封装,只能让大夫访问,并判断是不是大夫
* ---------------------------------------
*/
匿名内部类
/*
* 内部类定义在局部时(就是:类中的方法中)
* 1,不可以被成员修饰符修饰
* 2,可以直接访问外部类中的成员。因为还持有外部类中的引用。
* 但是,不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量
*
*/
class Out{ int x=3; void method(final int num) { final int y=4; //定义内部类:方法中的内部类,不可以加static静态变量修饰 class Inner { void function() { System.out.println("x="+x); System.out.println("y="+y); } } new Inner().function(); System.out.println("final="+num); }}public class _02匿名内部类 { public static void main(String[]args) { Out o = new Out(); o.method(5); o.method(7); } }
匿名内部类2
/*
* 匿名内部类:
* 1,匿名内部类其实就是内部类的简写格式
* 2,定义匿名内部类的前提:
* 内部类必须是继承一个类或者实现接口
* 3,匿名内部类的格式(new父类或者接口(){定义子类的内容})
* 4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象
* (注意:匿名类:是把定义类,调用对象封装为一体的表现形式)
* 5,匿名内部类中定义的方法最好不要超过3个
*
*/
abstract class Demo{ abstract void show();}class OutOne{ int x = 3; /* class Nei extends Demo { void show() { System.out.println("内部类:"+x); } } */ public void function() { //new Nei().show(); //上面绿色代码的简写方式:简称匿名内部类 //因为没有类名,所以调用父类的类名,然后将父类的方法赋写,最后调用父类的方法体.show new Demo() { void show() { System.out.println("x==="+x); } void abc() { System.out.println("xbs"); } }.abc(); }}public class _03_匿名内部类 { public static void main(String[]args) { new OutOne().function(); } }
---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------
- 黑马程序员——匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——java 内部类、匿名内部类
- 黑马程序员—内部类与匿名内部类 异常
- 黑马程序员—内部类、匿名内部类
- 黑马程序员——基础知识——匿名内部类
- 黑马程序员——匿名内部类写法
- 黑马程序员 Java面向对象——(匿名)内部类
- 黑马程序员 Java面向对象——(匿名)内部类
- 黑马程序员 Java面向对象——(匿名)内部类
- 黑马程序员——JAVA基础---匿名内部类
- 黑马程序员——java中的匿名内部类总结
- 黑马程序员——Java 基础:匿名内部类
- 黑马程序员——Java---匿名内部类
- 黑马程序员 匿名内部类
- 黑马程序员 匿名内部类
- 黑马程序员 匿名内部类
- Linux中select函数
- oracle导出excel 方法总结
- iOS 如何在一个应用程序中调用另一个应用程序
- Android 模拟手势之ActionMove
- 是什么让程序员想死的心都有了?
- 黑马程序员——匿名内部类
- 图片(img标签)的onerror事件
- 事务
- centos 设置定时任务执行指定脚本与Crontab的格式
- Java虚拟机学习笔记(一)——Java内存区域及内存溢出异常
- 东北四省赛已跪
- 网页中代码的顺序是不可忽略的细节
- 【Machine Learning实验1】batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
- SGU_submit