Java的内部类和匿名内部类
来源:互联网 发布:java 适配器设计模式 编辑:程序博客网 时间:2024/06/05 19:56
1.内部类
2.访问内部类
3.匿名内部类
1.内部类
1.内部类就是一个类定义在另一个类中。
2.A类要直接访问B类的成员时,可以将A类定义在B类中。哪怕访问的是B类的私有成员也可以。
3.规则:内部类可以直接访问外部类的成员,但外部类要想访问内部类的成员,只能通过创建内部类的对象来访问。
4.内部类相当于外部类的一个成员。可以被成员修饰符修饰。如 public,private,static等等。如果内部类的权限是非私有的,就可以被外部的用户程序访问到。
5.非静态的内部类中不能定义静态的变量,若非要用static修饰,就得同时用final修饰,表示静态常量。
6.为什么内部类可以直接访问外部类的成员?因为内部类持有了外部类的引用----- 外部类名.this 。但内部类是静态时就不持有外部类的引用了。
2.访问内部类
1.外部类访问内部类成员
2.外部用户程序访问内部类
3.静态非私有的内部类访问方法
1.外部类访问内部类成员:
只能通过创建内部类对象。那怎么创建呢?就是在外部类中定义一个方法,new一个内部类,再用其引用来访问内部类的成员。
class Outer //外部类{ class inter //内部类 { int num = 5; } public void method() //用于创建内部类对象 { inter in = new inter(); System.out.println(in.num); //访问内部类的num变量 }}public class Main{ public static void main(String []args) { Outer out = new Outer(); out.method(); }}//打印结果:5
2.外部用户程序访问内部类成员
class Outer //外部类{ class inter //内部类 { int num = 5; } public void method() //用于创建内部类对象 { inter in = new inter(); System.out.println(in.num); //访问内部类的num变量 }}public class Main{ public static void main(String []args) { Outer.inter in = new Outer().new inter(); //只要内部类不是私有的,就能通过用户程序创建其对象。 System.out.println(in.num); }}//打印结果:5
3.静态非私有的内部类访问方法
Outer.inter in = new Outer.inter(); System.out.println(in.num);跟上面的访问非静态的内部类不同,创建对象时不需要顺带创建外部类的对象。因为static静态修饰的东西不需要对象就可以调用。
class outer{ static class inter { int num = 5; }}public class Main{ public static void main(String[] args) { outer.inter in = new outer.inter(); System.out.println(in.num); }}//打印结果:5
3.匿名内部类
匿名内部类用于简化代码。
匿名内部类一般用于实现抽象类的方法或者实现接口。
匿名内部类只调用一次。
使用匿名类的前提条件:必须继承一个抽象父类或者实现一个接口
没有使用匿名内部类的代码:
abstract class Person{ public abstract void show();}class Man extends Person{ public void show() { System.out.println("this is man"); }}public class Main{ public static void main(String []args) { Person p = new Man(); p.show(); }}//打印结果:this is a man可以看出,代码是实现多态的一个代码。Man类继承Person类后,随后就通过 Person p = new Man() 向上提升为Person对象。然后用户操作的其实就是person的引用p。那么Man类实际上就是用了一次,作用就是用来实现Person类的抽象方法而已。那岂不浪费?如果使用匿名内部类的哈,完全就不需要敲Man类的定义代码了。
如:
abstract class Person{ public abstract void show();}public class Main{ public static void main(String []args) { Person p = new Person(){ public void show() { System.out.println("this is a man"); } }; p.show(); }}//打印结果:this is a man
0 0
- java 内部类 和 匿名内部类
- java 内部类和匿名内部类
- java内部类和匿名内部类
- java 内部类和匿名内部类
- java 内部类和匿名内部类
- Java内部类和匿名内部类
- Java的内部类和匿名内部类
- Java当中的内部类和匿名内部类
- java静态内部类和匿名内部类的使用
- java中的内部类和匿名内部类的使用
- Java内部类和匿名内部类的区别
- java局部内部类和匿名内部类的比较
- Java的内部类和匿名内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- java的内部类、匿名内部类、局部内部类
- java的内部类和匿名类
- JAVA 匿名类和内部类 、匿名内部类
- JAVA中的匿名类、内部类和匿名内部类
- 用C++实现的完全二叉树,实现前序遍历,中序遍历,后序遍历。
- Java程序规范
- 每天一个Linux命令(1):ls命令
- 在mybatis执行SQL语句之前进行拦击处理
- 精读前后端渲染之争
- Java的内部类和匿名内部类
- 重修大学JAVA课--应用类型比较器的实现方法:完善版
- sprig中基于注解的异常处理
- 【jzoj5071】【GDSOI2017第二轮模拟】【奶酪】【树形动态规划】
- 1
- Activity的回顾(一)
- 转场动画Scene transition
- 计算机经常遇到的小bug
- 用matlab画散点图并用光滑曲线连接(样条插值)