Java面向对象之内部类(匿名内部类)
2024-09-02 14:20:42
一、基础概念
匿名内部类:简化书写的内部类。其实匿名内部类就是一个子类对象。
前提:内部类需要继承或者实现外部的类或者接口。
格式:new 父类或者接口(){定义子类的内容}
二、将内部类定义到局部的实例代码
/*
class Outer
{
int num = 2;
//内部类
class Inner
{
int num = 3;
void show()
{
int num = 4;
System.out.println("show ..."+num);
System.out.println("show ..."+Inner.this.num);
System.out.println("show ..."+Outer.this.num);
}
}
public void method1()
{
new Inner().show();
}
}
*/ //将上面代码的内部类定义到局部位置上。
class Outer
{
private int num = 2;
public void method1()
{
final int x=3; //内部类在局部时,只能被final修饰的局部常量,才可以被访问。
class Inner
{
void show()
{
int num = 4;
System.out.println("x="+x);
System.out.println("show ..."+num);
System.out.println("show ..."+Outer.this.num);
}
} //创建内部类对象
Inner in = new Inner();
in.show();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new Outer().method1();
}
}
三、匿名内部类实例代码(一)
abstract class Demo
{
abstract void show1();
} class OuterDemo
{
int num = 4;
/*
class Inner extends Demo
{
//复写
public void show1()
{
System.out.println("show1 ..."+num);
}
}
Inner in = new Inner();
in.show();
*/ //将上面注释的代码用匿名内部类的方式显示 public void method2()
{
//匿名内部类
new Demo()
{
public void show1()
{
System.out.println("show1 ..."+num);
}
}.show1();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new OuterDemo().method2();
}
}
四、匿名内部类实例代码(二)
abstract class Demo
{
abstract void show1();
abstract void show2();
} class OuterDemo
{
int num = 4;
/*
class Inner extends Demo
{
//复写
public void show1()
{
System.out.println("show1 ..."+num);
}
public void show2()
{
System.out.println("show2 ..."+num);
}
}
Inner in = new Inner();
in.show();
*/ //将上面注释的代码用匿名内部类的方式显示
public void method2()
{
//匿名内部类
Demo a = new Demo()
{
void show1()
{
System.out.println("show1 ..."+num);
}
void show2()
{
System.out.println("show2 ..."+num);
}
};
a.show1();
a.show2();
}
} class InnerClassDemo2
{
public static void main(String[] args)
{
new OuterDemo().method2();
}
}
最新文章
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
- MVC架构设计——EF-Code First
- Python 之 【markdown 模块的学习】
- jQuery ajax传多个参数
- javascript和“主流大型语言”(c# JAVA C++等)的差异
- PKU 1064 Cable master
- SWI-Prolog
- 怎样使Android应用程序获得root权限
- Linux使用期间命令积累
- 微信小程序下拉刷新和上拉加载
- mysql优化sql语句的方法
- golang包管理解决之道——go modules初探
- 自动化测试基础-断言(Assert)使用方法
- Notepad++ tab替换为4个空格
- Mybatis 的配置xml和properties放在jar包以外的一种方法
- 使用VSCode调试单个PHP文件
- [vt][xen]xenserver初始安装增加第二块硬盘&;xen图形界面安装vm&;设置xen里vm开机启动
- on SDN
- Log4j输出格式控制
- sed.md