package InnerClass;
//内部类可以继承其他的类,也可以作为一个接口,由另一个内部类实现
//但匿名内部类(没有名字的类)不能继承其他的类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class InnerClassTest{
public static void main(String[] args) {
BankAccount account = new BankAccount(10000);
account.start(10);
JOptionPane.showMessageDialog(null, "Quit programe");
System.exit(0);
}
}
class BankAccount {
private double balance;
public BankAccount(double initialBanlance){
balance = initialBanlance;
}
public void start(double rate){
ActionListener adder = new InterestAdder(rate);
//在指定时间间隔触发一个或多个 ActionEvent
Timer t = new Timer(1000, adder);
t.start();
}
/**
* 内部类的定义:
* 内部类具有外部类的引用
* @author Administrator *
*/
public class InterestAdder implements ActionListener{
private double rate;
public InterestAdder(double aRate){
rate = aRate;
}
public void actionPerformed(ActionEvent e) {
//balance是外部类的属性
double interest = balance * rate /100;
balance += interest;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println("balance=" + formatter.format(balance));
}
}
}
package InnerClass;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class LocalInnerClassTest{
public static void main(String[] args) {
BankAccount account = new BankAccount(10000);
account.start(10);
JOptionPane.showMessageDialog(null, "Quit programe");
System.exit(0);
}
}
class BankAccount2 {
private double balance;
public BankAccount2(double initialBanlance){
balance = initialBanlance;
}
public void start(final double rate){
//局部内部类的定义,局部内部类不适用访问修饰符来声明
//局部内部类不仅能访问外部类的字段,甚至还可以访问局部变量!不过,哪些局部变量必须要被声明为final的
class InterestAdder implements ActionListener{
// private double rate;
public void actionPerformed(ActionEvent e) {
//balance是外部类的属性
double interest = balance * rate /100;
balance += interest;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println("balance=" + formatter.format(balance));
}
}
ActionListener adder = new InterestAdder();
//在指定时间间隔触发一个或多个 ActionEvent
Timer t = new Timer(1000, adder);
t.start();
}
//匿名内部类:
// 在使用匿名内部类时,要记住以下几个原则:
// 匿名内部类不能有构造方法。
// 匿名内部类不能定义任何静态成员、方法和类。
// 匿名内部类不能是public,protected,private,static。
// 只能创建匿名内部类的一个实例。
// 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
// 因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
/*
public void start(final double rate){
ActionListener adder = new ActionListener(){
public void actionPerformed(ActionEvent e) {
//balance是外部类的属性
double interest = balance * rate /100;
balance += interest;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println("balance=" + formatter.format(balance));
}
};
//在指定时间间隔触发一个或多个 ActionEvent
Timer t = new Timer(1000, adder);
t.start();
}
*
*/
}
package InnerClass;
//有时候,使用内部类只是为了把一个类隐藏在另一个类中,并不需要内部类具有对外部类对象的引用。
//这种情况下,可以把内部类声明为static的以去掉生成的引用
public class StaticInnerClassTest {
/**
* @param args
*/
public static void main(String[] args) {
double [] d = new double[20];
for(int i=0; i<d.length ; i++){
d[i] = 100*Math.random();
}
//可以通过OutClass.innerClass来使用内部类
ArrayAlg.Pair p = ArrayAlg.minmax(d);
System.out.println("min==" + p.getFirst());
System.out.println("min==" + p.getSecond());
}
}
class ArrayAlg{
public static class Pair{
private double first;
private double second;
public Pair(double f, double s){
first = f;
second = s;
}
public double getFirst(){
return first;
}
public double getSecond(){
return second;
}
}
public static Pair minmax(double[] d){
if(d.length == 0 ) return new Pair(0,0);
double min = d[0];
double max = d[0];
for(int i=0; i<d.length ; i++){
if(min > d[i]) min = d[i];
if(max < d[i]) max = d[i];
}
return new Pair(min,max);
}
}
分享到:
相关推荐
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
1.接口-简介 2.接口-作用 3.接口-定义方式 4.接口-实现 5.接口-与抽象类之区别 6.接口-应用示例(设计模式...内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
内部类分类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类
相关android开发中内部类 匿名内部类 内部接口 对比说明
实验报告8++内部类与异常类
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
成员内部类、局部内部类、静态内部类、匿名内部类
主要讲述了JAVA中内部类和匿名内部类的相关问题。
java基础第七章内部类与异常类.doc
java的内部类
反射私有内部类的例子 反射私有内部类的例子反射私有内部类的例子
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
java内部类详解
java 利用反射获取内部类静态成员变量的值操作.docx
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。