一.
关于匿名内部类:匿名内部类一定是继承了某个父类或是实现了某个接口
补充:面试题:
匿名内部类可以继承其他类和实现接口,因为匿名类就是在抽象类和接口的基础之上发展起来的!
public abstract class Anonymous {
private String name;
private int age;
public Anonymous(){
}
public Anonymous(String name,int age){
this.name=name;
this.age=age;
}
public String getInfo(){
return "Name:"+name+"\tAge:"+age;
}
public abstract void work();
}
//匿名内部类的举例,体会一下!---通过抽象类的演示
//可以参考ActionListener接口来理解该问题
public class AnonymousTest {
public static void main(String[] args) {
/*Anonymous a = new Anonymous() {
public void work() {
System.out.println("个人信息:" + this.getInfo());
System.out.println(" I am sailing,I am sailing!");
}
};
a.work();*/
// 这两种方式是等价的
// 以继承抽象类的方法写匿名内部类
class Singer extends Anonymous {
public Singer() {
}
public Singer(String name, int age) {
super(name, age);
}
public void work() {
System.out.println("个人信息:" + this.getInfo());
System.out.println("I am sailing, I am sailing!");
}
}
Anonymous a = new Singer();
a.work();
}
}
public interface Anonymous2 {
public abstract void swim();
}
//匿名内部类使用举例2------通过接口的演示
public class Anonymous2Test {
public static void main(String[] args) {
Anonymous2Test at = new Anonymous2Test();
at.test(new Anonymous2() {
public void swim() {
System.out.println(" I's swimming!");
}
});
}
//这两种方法是等价的
//以显示接口的方式来写匿名内部类
/*public static void main(String args[]) {
Anonymous2Test ta = new Anonymous2Test();
class Anony implements Anonymous2 {
public void swim() {
System.out.println("I'swimming!");
}
}
ta.test(new Anony());
}*/
public void test(Anonymous2 swimmer) {
swimmer.swim();
}
}
二.
在new 类型名(接口名){重写其的方法}........匿名内部类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* 匿名[内部]类在swing中的应用
* */
public class SwingTest {
public static void main(String[] args) {
// 创建一个窗体
JFrame frame = new JFrame("JFrame");
// 设置其大小
frame.setSize(500, 500);
// 设置关闭按钮
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体大小不可变
frame.setResizable(false);
// 另一种 设置关闭按钮
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// 系统正常退出
System.exit(0);
}
});
// 创建一个按钮
JButton button = new JButton("JButton");
// 添加监听器
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("按钮被点击");
}
});
// 把按钮加入面板中
frame.getContentPane().add(button);
// 设置窗体可见
frame.setVisible(true);
}
}
三.
类中static的内部类.......相当于静态方法
四.
类中非static的内部类......相当于非静态方法
五.
方法中的内部类(不能有public,无修饰符,或者有abstract、final修饰符)......
1.只能访问其所在方法中final类型的变量,传递给方法的参数也必须是final的!???还是要在实际中操作!!
2.可以肯定的一点是:如果局部类要访问其所在方法中的变量,那么此变量必须是final的
六:
静态内部类(static inner class)
/**
* 静态内部类......相当于静态方法
* */
class StaticInner{
private static int a=3;
public static class Inner{
public void test(){
System.out.println(a);
}
}
}
public class Test2 {
public static void main(String[] args) {
StaticInner.Inner inner=new StaticInner.Inner();//静态内部类直接调用
inner.test();
}
}
成员内部类(member inner class)
/**
* 成员内部类......相当于非静态方法
* */
class MemberInner {
private int a = 3;
public class Inner2 {
private int a = 2;
public void doSomething() {
// 调用外部类的属性
System.out.println(MemberInner.this.a);// 这块要注意......很重要!!!
System.out.println(a);
}
}
}
public class Test3 {
public static void main(String[] args) {
MemberInner.Inner2 inner2 = new MemberInner().new Inner2();// 非静态内部类要new实例
inner2.doSomething();
}
}
局部内部类(local inner class)
/**
* 局部内部类......相当于局部变量
* */
class LocalInner {
public void doSomething(int b) {
final int a = 3;// 只能访问final的变量
class Inner3 {
public void test(int b) {
System.out.println(b);
System.out.println(a);
}
}
new Inner3().test(b);
}
}
public class Test4 {
public static void main(String[] args) {
LocalInner inner = new LocalInner();
inner.doSomething(4);
}
}
匿名内部类(anonymous inner class)------一种特殊的局部内部类
/**
* 匿名内部类也相当于局部变量......记住无构造函数!!!
* 所谓匿名类是没有名字的类,
* 而构造函数是与类名相同无返回值的方法,
* 所以一个匿名类不能由程序员给定构造函数。
* */
public class Test {
@SuppressWarnings("deprecation")
public String get(Date date) {
return date.toLocaleString();
}
public static void main(String[] args) {
Test test = new Test();
String result = test.get(new Date() {// 生成Date类的一个子类
private static final long serialVersionUID = 1L;
public String toLocaleString() {// 意义上是重写了这个方法
return "hello world";
}
});
System.out.println(result);
}
}
补充问题:
1.内部类的一个好处是内部类一般可以访问它的嵌套类(外部类)的域。
2.不像外部类,内部类可以是private或static。
分享到:
相关推荐
第二章:MyEclipse的基本使用; 第三章:Java基础语法; 第四章:数组的应用; 第五章:面向对象的Java编辑; 第六章:接口与内部类; 第七章:集合的应用; 第八章:异常和反射; 第九章:初识AWT和Swing; 第十章...
第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到抽象的升华 第10天:权限内部类包 第11天:API类 第12天:字符串王者地位 第13天:...
11.1 插曲:类的组成部分的名字 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 ...
11.1 插曲:类的组成部分的名字 291 11.2 类中的修饰符 292 11.2.1 无修饰符类 292 11.2.2 类的可见性 293 11.2.3 final——让类不可被继承 295 11.2.4 理解final关键字 296 11.2.5 总结:类的修饰符 297 ...
第二章:JAVA设计模式 18 2.1:创建型设计模式 19 2.2:结构型设计模式 32 2.3:行为型设计模式 83 第三章:JAVA基本语法 118 3.1:语言基础知识 118 3.2:声明和访问控制 120 3.3:运算符和赋值 121 3.4:流程控制...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
第二十三章:HTML基础 419 学习目标 419 知识要点 420 HTML元素 420 标签属性 420 HTML基本标签 422 标题元素 422 HTML格式 427 HTML实体 431 不可拆分的空格 431 HTML表格 439 表格 441 HTML列表 461 HTML图像 469 ...
学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...
一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...
第二十三计:避免重复代码 15 第二十四计:增加注释 16 第二十五计:函数体最多不超过100行 16 第二十六计:使用语言的修饰符确保变量的不可变性 17 第二十七计:对象状态共享 17 第二十八计:用对象代替普通常量 17...
(不借助第3个变量) 23 第4章 流程控制 25 实例019 判断某一年是否为闰年 26 实例020 验证登录信息的合法性 27 实例021 为新员工分配部门 28 实例022 用switch语句根据消费 金额计算折扣 29 实例023 判断用户输入...
第二部分:热门框架 第三部分:数据库相关 第四部分:Java进阶 23.说一下JVM的内存布局和运行原理? 24.垃圾回收算法有什么? 25.你用过一些垃圾回收器?它们有什么区别? 26.生产环境如何排除和优化JVM? ...
学通Java的24堂课,李钟尉 李伟主编。第23课,企业内部通讯管理系统。课本内容pdf格式。
第二章(1) 编程的基本概念 22 注释 22 标识符 22 关键字/保留字 23 变量(variable) 24 常量(Constant) 25 命名规则(规范) 25 基本数据类型(primitive data type) 26 整型变量 26 浮点型 27 字符型(2个字节): 28 ...