Java基础--匿名内部类
2021-07-03 20:06
标签:简单的 int() 格式 传递 str 技术分享 java sys one 一、什么是匿名内部类 就是内部类的简化写法 前提:存在一个类或者接口(这里的类可以是具体类也可以是抽象类) 格式:new 类名或者接口名(){ 重写方法; } 二、匿名内部类的本质是什么? 是一个继承了该类或者实现了该接口的子类的匿名对象 三、匿名内部类重写多个方法调用 结论:匿名内部类只针对重写一个方法时候使用 四、匿名内部类在开发中的应用 匿名内部类当做参数传递(本质把匿名内部类看做一个对象) 简单的说就是new 抽象类/接口,然后重写方法。 五、匿名内部类的面试题 按照要求,补齐代码 class OuterDemo{ public static void main(String[] args){ Outer.method().show(); } } interface Inter{ void show(); } class Outer{ //补齐代码 } 要求在控制台输出“HelloWorld” 分析: Outer.method(),用类去调用方法说明该类是静态的 Outer.method().show(),说明Outer.method()返回的是一个对象,有show方法的只有Inter Java基础--匿名内部类 标签:简单的 int() 格式 传递 str 技术分享 java sys one 原文地址:https://www.cnblogs.com/lxc116317/p/9620852.htmlclass Demo1_NoNameInnerClass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inter {
public void print();
}
class Outer {
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();
}
}
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(); //匿名内部类是不能向下转型的,因为没有子类类
名
}
}
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");
}
}
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”
下一篇:c++默认参数函数注意事项