内部类---匿名内部类

 匿名内部类(重要!!!) 
//1.本质是类 2.是内部类3.该类没有名字(系统给取的,看不见)4.是一个对象
说明: 匿名内部类是定义在外部类的局部位置,比如在方法中,并且没有类名
匿名内部类的基本语法:
new 类或接口(参数列表){
类体
};


//匿名内部类的语法()
1.因为匿名内部类既是一个类,同时它本身也是一个对象。
2.因此从语法上看,它既有定义类的特征,也有创建对象的特征
3.可以直接访问外部类的 所有 成员,包含私有的
4.不能添加访问修饰符,因为它 就是一个 局部变量。
5.作用域 : 仅仅在定义它的方法或代码块中。
6.匿名内部类---访问---->外部类成员 [访问方式: 直接访问]
7.外部其他类---不能访问---->匿名内部类( 因为 匿名内部类 是一个局部变量)
8.如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵循就近原则如果想访问外部类的成员,
    则可以使用 类名.this.成员)去访问

匿名内部类作为参数
复制代码
 1 public class AnnoyInnerClass {
 2     public static void main(String[] args){
 3         Cellphone cellphone = new Cellphone();
 4         //new Computer() {
 5         //     @Override
 6         //     public void work() {
 7         //     system.out.println("重写work()方法");
 8         //            }
 9         //        }//这一整块都是匿名内部类,因为是将匿名内部类作为参数传入了
10         cellphone.testWork(new Computer() {//编译类型就是接口,运行类型就是这个匿名内部类
11             @Override
12             public double work(double n1 ,double n2) {
13                 return n1+n2;
14             }
15         },5,6);
16 
17     }
18 }
19 
20 interface Computer{
21     public double work(double n1,double n2);
22 }
23 
24 class Cellphone {
25     //当调用了testWork方法时,直接传入了一个实现了Computer接口的匿名内部类
26     public void testWork(Computer computer,double n1,double n2){
27         double result = computer.work(n1, n2);//动态绑定
28         System.out.println("计算结果="+result);
29     }
30 }
复制代码

 







posted @   叶黄素酯片  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示