黑马程序员技术交流社区

标题: 静态方法 [打印本页]

作者: 孟茹    时间: 2014-3-4 12:10
标题: 静态方法
这个里面那个get方法为什么可以那样调用?

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

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

作者: hauntedlove    时间: 2014-3-4 12:29
用static修饰的是静态方法,静态方法的调用方式是类名.方法名。由于get()方法处在Demo类的内部,所以,调用时就不用再写Demo.get()了。
作者: 漠然~回首℃    时间: 2014-3-4 23:54
静态方法可以类名.方法名直接调用啊!所以能Demo.get();
作者: 赵卓辉    时间: 2014-3-5 00:58
这是哪里来的题目啊,你编译会出错。接口中没有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. }
复制代码

作者: 杯之水    时间: 2014-3-5 07:00
用Static修饰的方法为静态方法,可以通过类名.方法名来调用get()方法,又因为该方法的返回值类型为接口A,返回值为new B(),所以A a=new B() 即进行向上转型。
作者: 云行水边    时间: 2014-3-5 09:47
静态方法可以直接调用,例如Frame.add()方法,又由于get()方法在内部,所以可以直接调用
作者: sanguodouble1    时间: 2014-3-5 10:12
1.因为main()方法和get()方法是属于Demo类的,而且都是静态的(也就是在虚拟机加载的时候就已经存在于内存的方法区code segment中了),所以可以不必实例化demo,在main()中直接调用

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

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2