一.
关于匿名内部类:匿名内部类一定是继承了某个父类或是实现了某个接口
补充:面试题:
匿名内部类可以继承其他类和实现接口,因为匿名类就是在抽象类和接口的基础之上发展起来的!
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天:...
内部类(包括成员内部类、局部内部类、匿名内部类)是Java特有的特性,允许在类内部定义其他类。 【Java高级】 Java高级部分涵盖了更复杂的特性和技术,包括: 1. **反射**:Java反射机制允许在运行时检查类的信息...
例如,在类`Lamp`中,`watts`和`isOn`的作用域是整个类,而局部变量`dummy`只在`for`循环内部有效。离开作用域后,尝试访问变量会导致编译错误。 在实际编程中,我们需要【实例分析】来巩固理论知识。例如,创建一...
2. **第二章:Java环境配置** - 如何安装JDK - 设置JAVA_HOME环境变量 - 编写Hello World程序 3. **第三章:基本语法** - 变量、数据类型(基本类型与引用类型) - 运算符(算术、比较、逻辑、位运算符) - ...
2. 对于Java的`main`方法,其方法头必须是`public static void main(String[] args)`,所以第二题的答案是B。 3. 若要使一个方法能被类名直接调用,需要将其声明为静态(`static`),因此第三题的答案是A,即`...
2. **第二章:环境搭建** - 教授如何下载和安装Java Development Kit (JDK),配置Java环境变量,以及使用集成开发环境(IDE)如Eclipse或IntelliJ IDEA。 3. **第三章:Java语法基础** - 讲解Java的基本语法,包括...
第二章:JAVA环境搭建 这一章将详细讲解如何在不同操作系统上安装JAVA开发工具包(JDK),配置JAVA环境变量,以及如何使用命令行工具如javac和java进行编译和运行JAVA程序。 第三章:JAVA语法基础 这部分涵盖了JAVA...
10. **第十三章:抽象类和内部类** - 抽象类用于定义接口或作为其他类的基类,不包含具体实现。内部类则允许在一个类的内部定义另一个类,提供了更复杂的封装和设计可能性。 11. **第六章:Java语言高级语法** - ...
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程序 - 通过编写简单的Java程序来熟悉开发流程和基本语法结构。 #### 第三章:Java基础程序设计 - **Java数据类型** - 基本数据类型:如int、double等。 - 引用数据类型:如String、数组...
Java是一种广泛使用的面向对象的编程...这些基础知识构成了Java编程的基础,理解并熟练掌握它们是成为一名合格的Java开发者的第一步。通过深入学习和实践,可以逐步进阶到更高级的主题,如多线程、反射、设计模式等。
第二天:Java语法基础 1. 掌握Java的基本数据类型,包括整型、浮点型、字符型和布尔型。 2. 学习变量的声明、初始化和使用,理解常量的概念。 3. 学习流程控制语句,如if条件语句、switch选择语句、for循环和while...
- **知识点**: Java中的匿名内部类。 - **解析**: 正确。匿名内部类可以继承其他类。 13. **`final`类的作用** - **知识点**: `final`关键字的用途之一。 - **解析**: 正确。使用`final`关键字声明的类不能被...
在Java编程语言中,"类的方法"是程序设计的核心概念之一。在ACC"P5.0"的课程体系中,第七章专门讲解了这个主题。这一章涵盖了如何在Java中定义和使用方法,以及它们在面向对象编程中的作用。下面我们将详细讨论这个...