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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孟茹 中级黑马   /  2014-3-4 12:10  /  1339 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个里面那个get方法为什么可以那样调用?

为什么get方法可以那样.jpg (111.66 KB, 下载次数: 6)

为什么get方法可以那样.jpg

评分

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

查看全部评分

6 个回复

倒序浏览
用static修饰的是静态方法,静态方法的调用方式是类名.方法名。由于get()方法处在Demo类的内部,所以,调用时就不用再写Demo.get()了。

评分

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

查看全部评分

回复 使用道具 举报
静态方法可以类名.方法名直接调用啊!所以能Demo.get();
回复 使用道具 举报
这是哪里来的题目啊,你编译会出错。接口中没有test()这个方法,编译通不过。你可以做以下修改,即可运行,打印结果为“yes”
  1. package test019.zzh.bean;

  2. interface A{
  3.         String test();
  4. }
  5. class B implements A{
  6.         public String test(){
  7.                 return "yes";
  8.         }
  9. }
  10. public class Demo {
  11.         static A get(){
  12.                 return new B();
  13.         }
  14.         public static void main(String args[]){
  15.                 A a=get();
  16.                 System.out.println(a.test());
  17.         }
  18. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
用Static修饰的方法为静态方法,可以通过类名.方法名来调用get()方法,又因为该方法的返回值类型为接口A,返回值为new B(),所以A a=new B() 即进行向上转型。

评分

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

查看全部评分

回复 使用道具 举报
静态方法可以直接调用,例如Frame.add()方法,又由于get()方法在内部,所以可以直接调用
回复 使用道具 举报
1.因为main()方法和get()方法是属于Demo类的,而且都是静态的(也就是在虚拟机加载的时候就已经存在于内存的方法区code segment中了),所以可以不必实例化demo,在main()中直接调用

2.因为get()方法的返回值是B类型,也就是接口A的实现类
所以A a = get();其实就是父类引用指向子类对象

3.这样就满足多态的三个条件:继承、重写、父类引用指向之类对象

所以a.test()其实就是调用B.test()
也就是最后输出"yes"

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马