先来理解2个概念:闭包和回调
2,还是上面一样的情形,但是一个是普通的类,一个是抽象类呢? 这个时候就只能使用内部类了。
3,还是上面的情形,现在一个是普通的类,一个是接口,里面都包含一个同名的方法,要如何实现写一个新的class来实现上面2个功能呢?如何正常一个直接继承,一个实现,代码是这样子的:
很明显的不符合需求,那么要怎么办呢?内部类。
上面的代码呢?符合需求了,但是如果我想有的时候直接在外部类就使用到binger这个接口里面的那个规范方法呢?有没有稍微高深点的方法呢?回调。
- 什么是闭包?
- 什么是回调?
- 值得说明的是:内部类最大的作用就是实现了多继承。java是单继承的,使用内部类可以使得编程更加的灵活。
1,必须在同一个类中以某种方式实现2个接口?
public class Linkin implements A,B{
@Override
public void testB() {
}
@Override
public void testA() {
}
}
interface A{
public void testA();
}
interface B{
public void testB();
}
public class Linkin implements A{
//定义一个方法,返回一个实现了B的匿名内部类,去实现B
B makeB(){
return new B(){
@Override
public void test() {
System.out.println("实现接口B...");
}
};
}
//这里是外部类,直接实现了接口A
@Override
public void test() {
System.out.println("实现接口A...");
}
}
interface A{
public void test();
}
interface B{
public void test();
}
2,还是上面一样的情形,但是一个是普通的类,一个是抽象类呢? 这个时候就只能使用内部类了。
public class Linkin extends A{
//使用内部类,可以很好实现多继承
B makeB(){
return new B(){
@Override
public void test() {
System.out.println("这里来实现下面那个抽象类B的方法。。。");
}
};
}
}
class A{
public void test(){
System.out.println("这里是A类的一个方法。。。");
}
}
abstract class B{
abstract public void test();
}
3,还是上面的情形,现在一个是普通的类,一个是接口,里面都包含一个同名的方法,要如何实现写一个新的class来实现上面2个功能呢?如何正常一个直接继承,一个实现,代码是这样子的:
public class Linkin extends A implements Binger{
@Override
public void test(){
System.out.println("这里是B类的一个方法。。。");
}
public static void main(String[] args) {
Linkin linkin = new Linkin();
linkin.test();
}
}
class A{
public void test(){
System.out.println("这里是A类的一个方法。。。");
}
}
interface Binger{
//以后再写接口的时候,就不要再罗里吧嗦的写什么public了 默认都是public abstract的
void test();
}
很明显的不符合需求,那么要怎么办呢?内部类。
public class Linkin extends A {
public Binger getBinger(){
return new Binger(){
@Override
public void test() {
System.out.println("这里是B接口的实现。。。");
}
};
}
public static void main(String[] args) {
Linkin linkin = new Linkin();
linkin.test();
linkin.getBinger().test();
}
}
class A{
public void test(){
System.out.println("这里是A类的一个方法。。。");
}
}
interface Binger{
//以后再写接口的时候,就不要再罗里吧嗦的写什么public了 默认都是public abstract的
void test();
}
上面的代码呢?符合需求了,但是如果我想有的时候直接在外部类就使用到binger这个接口里面的那个规范方法呢?有没有稍微高深点的方法呢?回调。
/**
*
* @version 1L
* @author LinkinPark
* @since 2014-11-6
* @motto 梦似烟花心似水,同学少年不言情
* @desc ^现在的代码就有点NB了,我们既可以直接使用外部类2个不同名的方法,来调用A和BInger里面那2个方法,又可以调用一个方法,得到内部类,使用同名的方法
*/
public class Linkin extends A {
//A类里面的Test方法通过继承得到
//这里的这个方法其实就是接口Binger的Test实现方法
public void otherTest(){
System.out.println("这里是B接口的实现。。。");
}
private class BingerImpl implements Binger{
@Override
public void test() {
otherTest();
}
}
//这里返回上面那个内部类的引用,在以后使用的时候就不用来每次new内部类了
public Binger getBinger(){
return new BingerImpl();
}
public static void main(String[] args) {
Linkin linkin = new Linkin();
linkin.test();
//下面2行代码功能一样
linkin.otherTest();
linkin.getBinger().test();
}
}
class A{
public void test(){
System.out.println("这里是A类的一个方法。。。");
}
}
interface Binger{
//以后再写接口的时候,就不要再罗里吧嗦的写什么public了 默认都是public abstract的
void test();
}