/*【匿名对象练习】
* 练习:
*/
interface Inter{
void method();
}
class Test{
//补齐代码。
///*
static class Innter implements Inter{
public void method(){
System.out.println("method run");
}
}
static Inter funtcion(){
System.out.println("function");
return new Innter();
}
//*/
/*
static Inter function(){
//补齐代码。
return new Inter(){
public void method(){
System.out.println("no name method");
}
};
}
*/
}
public class Test_NoNameNeiBuLei {
public static void main(String[] args) {
//Test.function().method();
/*
* 1、读到test.funtcion()用类名调用,说明被调用的是一个static修饰的funtcion()方法
* 2、点.method() 可以确定functions【运算完】返回结果是一个对象。而且是Inter类型
* 只有返回来的是一个对象,对象才能调用method()
* 什么对象又能调用method()呢,必然是Inter的对象,所以返回类型就是Inter
* 这段代码其实就是:
* Inter in=Test.function();
* in.method()
*/
show(new Inter(){
public void method(){
System.out.println("no name method");
}
});
}
/*什么时候使用匿名内部对象
*
* 当你使用的方法是参数类型是接口类型的时,该接口,你去查看一下,发现里面方法不超过3个
* 两个或一个的时,你可以定义一个匿名内部类,把匿名内部类作为参数,传进去。
*/
public static void show(Inter in){
in.method();
}
/*面试题:
* 在main函数中:
* new Object(); 这个是new一个【Object对象】
* new Object(){}这个是Object的【子类对象】 (只有子类才能定义特殊方法。)
*/
}
--------------------------------------------------------------------------------------------------------------------
/*
* 匿名内部类: 就为简化书写,覆盖方法。 没有名字的内部类。
* 1、其实就是内部类的简写格式。
* 2、定义匿名内部类的前提:
* 内部类必须是继承一个类或者实现接口。
* 3、匿名内部类的格式: new 父类/接口(){子类方法} (()可以传参)
* 3、其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解为带内容的对象。
* 4、匿名对象只能调用方法一次。
* 5、匿名内部类中最好不要超过3个。 就为简化书写,覆盖方法。多了就复杂了
*/
abstract class AbsDemo{
abstract void show();
}
class Outerr{
int x=3;
/* 【aa】//把该类简化为匿名内部类
class Inner extends AbsDemo{
public void show(){
System.out.println("methodd"+x);
}
}
*/
public void function(){
//new Inner().show();
//就是把上面的Inner()用父类替换,并用大括号实现有名字的方法就是:
//new 父类名(){子类内容}.show(); 就是匿名内部对象了
//带着内容的对象。 是一个对象,AbsDemo的子类对象,已经复写AbsDemo的方法是【aa】的匿名内部写法
new AbsDemo(){
//AbsDemo b=new AbsDemo(){
//int num=9; //该句是可以的,应为是子类的特有的
void show(){
System.out.println("NoName"+x);
}
/*还可以定义子类特有方法,同非匿名对象一样的,只不过只能调用一次
*
void abc(){
System.out.println("abc"+x);
}*/
}.show();
//b.show();
//b.abc();//编译失败 父类没有该方法。
}
}
public class Demo_NoNameNeiBulei {
public static void main(String[] args) {
new Outerr().function();
}
}
黑马官网: http://edu.csdn.net/heima