A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LINUS 中级黑马   /  2013-3-31 18:49  /  1813 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么B类 格式不是  class B implements A 呢 ,如果不是接口,如果A类是抽象类格式该怎么写?
  1. interface A{
  2.         public abstract void show();
  3. }
  4. class B{
  5.         public static A method(){ //这一步什么意思,static A 是什么意思?
  6.                 return new A(){  //为什么必须用return ,而不是这个new的子类后面直接.show();结尾呢?
  7.                         public void show(){
  8.                                 System.out.println("淡定淡定淡定");
  9.                         }
  10.                 };
  11.         }
  12. }

  13. class Demo{
  14.         public static void main(String[] args){
  15.                 A a = B.method();// 这一步什么意思??
  16.                 a.show();

  17.         }
  18. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

17 个回复

倒序浏览



评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 小贝童鞋很不错哦!赞一个!继续加油!一天.

查看全部评分

回复 使用道具 举报
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(){.....}。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 易贺男 于 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方法是静态的所以可以被类名直接调用

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
如果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("淡定淡定淡定");
                        }
                };
        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
class B{
        public static A method(){ //这个是 B类的自己的静态方法,如果想使用该方法时,可通过俩种方式,一种是new一个B 类的对象,通过对象.调用,在这里该方法是静态方法,可使用类名.方法直接调用。 这里A 是返回类型,意思是返回一个A 类型。
                return new A(){  //因为method 方法是有返回类型的,所以必须return。
                        public void show(){
                                System.out.println("淡定淡定淡定");
                        }
                };
        }
回复 使用道具 举报
class Demo{
        public static void main(String[] args){
                A a = B.method(); //这是通过B类.直接调用了B类中的静态方法method();,且该方法返回的是一个A 类型的对象。
                a.show();

        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
继承是子类继承父类的所有成员,内部类是就只执行一次的对象一建立就只执行一次

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
LINUS 中级黑马 2013-3-31 21:34:27
9#
还是有点模糊·······不知固定合适还是?~
回复 使用道具 举报
建议 你好好 看看 毕老师的 java基础吧,,可以多看几遍,,我都看好几遍了,,想把 基础 摸透 咯,,再往下学,,要不很 吃力的
回复 使用道具 举报
黄小贝 发表于 2013-3-31 18:59

小贝。你用的是什么软件呀
用来编辑那个红色方框的。
回复 使用道具 举报
张超 发表于 2013-4-1 12:42
小贝。你用的是什么软件呀
用来编辑那个红色方框的。

很明显说出来你们都不信,QQ~~~~
回复 使用道具 举报
黄小贝 发表于 2013-4-1 15:45
很明显说出来你们都不信,QQ~~~~

这麽神奇,QQ的什么功能呀
回复 使用道具 举报
张超 发表于 2013-4-1 16:09
这麽神奇,QQ的什么功能呀

QQ的截图功能,ctrl+alt+A  截图框下面就有各种方框,文字,和线
回复 使用道具 举报
黄小贝 发表于 2013-4-1 16:11
QQ的截图功能,ctrl+alt+A  截图框下面就有各种方框,文字,和线

哦,刚刚试了还不错,

回复 使用道具 举报
这很简答,你要明白,接口不能创建对象
public static A method(){ //这一步什么意思,static A 是什么意思?static方法代表该类是静态的,返回值是A,但A是一个接口,所以返回的是实现了接口A的类对象
return new A(){  //为什么必须用return ,而不是这个new的子类后面直接.show();结尾呢?A是接口,无法创建对象,所以必须使用匿名内部类,创建一个实现接口的类,并
覆写接口中的抽象方法
A a = B.method();// 这一步什么意思?调用静态方法method,返回的是实现了A接口的对象
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马