没有名字的类 只能使用一次 优先使用匿名内部类
package com.qf.demo2;
/**
* 匿名内部类
* 只使用一次
* @author Administrator
*抽象类 举例
*/
public class AnonymityInner {
public static void main(String[] args) {
Runner runner = new Person2();
runner.run();
Runner runner2 = new Runner() // 没有名字只能用父类名
// 中间是创建来一个runner的实现类 实现类没有名字
{// 匿名内部类的写法
隐藏了实现类的类名。
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("匿名内部类的写法");
}
};
runner2.run();
}
}
abstract class Runner{
public abstract void run();
}
class Person2 extends Runner{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("人跑步");
}
public void eat(){
}
}
匿名类传递参数举例
package com.qf.demo2;
public class AnonymityInner2 {
public static void main(String[] args) {
Student student = new Student("name", 3);
student.speak();
// 匿名内部类有构造方法 传递参数
Person person = new Person("张三",5) {
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("匿名内部类的speak");
}
};
person.speak();
// 匿名内部类作为参数
test(new Person("李四",7) {
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("匿名内部类的speak 李四");
}
});
}
public static void test(Person person){ //= new Person(){}
person.speak();
}
}
abstract class Person{
String name ;
int age ;
public Person(String name ,int age){
this.name = name;
this.age = age;
}
public abstract void speak();
}
class Student extends Person{
public Student(String name, int age) {
super(name, age);
// TODO Auto-generated constructor stub
}
@Override
public void speak() {
// TODO Auto-generated method stub
System.out.println("说");
}
}
接口举例
public class AnonymityInner {
public static void main(String[] args) {
Runner runner2 = new Runner() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("人跑步");
}
};
runner2.run();
}
}
interface Runner {
public void run();
}