作者: 小黑黑 时间: 2013-3-31 19:10
1、public static A method(),这句话的意思是B类中有个公有方法,是静态的,可被类直接调用,返回类型是一个接口A类型的,就相当于返回了int或者其他类型是一个道理,方法名为method
2、用return的原因就是因为你上面定义了返回类型是接口A类型的,所以你得返回一个A类型或其引用,对于void类型不用return的,但是对于有返回类型的方法,必须加上return返回你指定的类型(这里是A类型)。
3、new A()其实是使用了匿名内部类,你应该注意到了A()后有大括号,其中是实现A接口中的方法,因为你不能实例化一个接口,但是可以用这种方式(匿名内部类)来实例化接口(确切说是其子类)。
4、因为你这里的new A(){....}是作为方法的放回值存在的,返回的是A接口的类型对象或其引用,如果你.show()的话,那么返回的是这个调用的show方法的结果,就好比说,假设你这样做:A a = new A(){.....},在这里你就相当于调用了a.show(),,返回的是打印的语句,其实就是void,那么你不是和上面你指定返回A类型矛盾吗?所以不能加上.show()
5、对于A a = B.method(),因为B.method()的值是一个实现A的对象,那么将实现A的对象赋给A的引用a,就相当于我上面写的:A a = new A(){.....}。作者: yhnan 时间: 2013-3-31 19:15 本帖最后由 易贺男 于 2013-3-31 19:22 编辑
public static A method(){ //这一步什么意思,static A 是什么意思?
这是一个静态函数 返回值是A类型的。
return new A(){ //为什么必须用return ,而不是这个new的子类后面直接.show();结尾呢?
意思是返回一个A类型的对象。这是一个复写了A的show方法的匿名内部类(A的子类)
A a = B.method();// 这一步什么意思??
这步运用到多态。因为method方法是静态的所以可以被类名直接调用作者: 董维明 时间: 2013-3-31 20:58
如果A 类 是抽象类的话,写法如下
class A{
public abstract void show();
}
class B extends A {
public abstract void show(){
System.out.print("作为子类,B 必须重写 父类 A中的抽象方法!");
}
public static A method(){ 这个是子类的特有方法,,就是自己的,大个比喻吧,,这个是你老婆,而不是你从父亲那里继承来的
return new A(){
public void show(){
System.out.println("淡定淡定淡定");
}
};
}
}作者: 董维明 时间: 2013-3-31 21:03
class B{
public static A method(){ //这个是 B类的自己的静态方法,如果想使用该方法时,可通过俩种方式,一种是new一个B 类的对象,通过对象.调用,在这里该方法是静态方法,可使用类名.方法直接调用。 这里A 是返回类型,意思是返回一个A 类型。
return new A(){ //因为method 方法是有返回类型的,所以必须return。
public void show(){
System.out.println("淡定淡定淡定");
}
};
}作者: 董维明 时间: 2013-3-31 21:05
class Demo{
public static void main(String[] args){
A a = B.method(); //这是通过B类.直接调用了B类中的静态方法method();,且该方法返回的是一个A 类型的对象。
a.show();