版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载,违者必究。 https://blog.csdn.net/Cricket_7/article/details/91490142
1,匿名内部类的格式和理解,
【1】匿名内部类
-
就是内部类的简化写法。
【2】前提:存在一个类或者接口
-
这里的类可以是具体类也可以是抽象类。
【3】格式:
new 类名或者接口名(){
重写方法;
}
【4】本质是什么呢?
-
是一个继承了该类或者实现了该接口的子类匿名对象。
【5】案例演示
* 按照要求来一个匿名内部类
class Demo1_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void print();
}
class Outer {
class Inner implements Inter {
public void print() {
System.out.println("print");
}
}
public void method(){
//Inner i = new Inner();
//i.print();
//new Inner().print();
//Inter i = new Inner(); //父类引用指向子类对象
new Inter() { //实现Inter接口
public void print() { //重写抽象方法
System.out.println("print");
}
}.print();
/*
new一个类,小括号,大括号是
继承这个类,或者是实现这个借口.
*/
new Inter(){
public void print(){
System.out.println("我是匿名内部类");
}
}.print();
}
}
2,匿名内部类重写多个方法调用)
【1】 匿名内部类的方法调用
class Demo2_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void show1();
public void show2();
}
//匿名内部类只针对重写一个方法时候使用
class Outer {
public void method() {
/*new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show1();
new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
}.show2();*/
Inter i = new Inter(){
public void show1() {
System.out.println("show1");
}
public void show2() {
System.out.println("show2");
}
/*public void show3() {
System.out.println("show3");
}*/
};
i.show1();
i.show2();
//i.show3(); //匿名内部类是不能向下转型的,因为没有子类类名
}
}
3,匿名内部类在开发中的应用
class Test1_NoNameInnerClass {
public static void main(String[] args) {
//如何调用PersonDemo中的method方法呢?
PersonDemo pd = new PersonDemo ();
//pd.method(new Student());
//在开发中的应用,匿名内部类当作一个参数传递(本质把匿名内部类看做一个对象)
pd.method(new Person() {
public void show() {
System.out.println("show");
}
});
}
}
//这里写抽象类,接口都行
abstract class Person {
public abstract void show();
}
class PersonDemo {
//public void method(Person p) { //Person p = new Student(); //父类引用指向子类对象
/*
Person p = new Person(){
public void show() {
System.out.println("show");
}
};
*/
public void method(Person p) {
p.show();
}
}
class Student extends Person {
public void show() {
System.out.println("show");
}
}
4,练习
class Test2_NoNameInnerClass {
public static void main(String[] args) {
//Outer.method().show(); //链式编程,每次调用方法后还能继续调用方法,证明调用方法返回的是对象
Inter i = Outer.method();
i.show();
}
}
//按照要求,补齐代码
interface Inter {
void show();
}
class Outer {
//补齐代码
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("show");
}
};
}
}
//要求在控制台输出”HelloWorld”