黑马程序员技术交流社区

标题: static方法能被继承吗?为什么? [打印本页]

作者: 。。。。。。。    时间: 2013-11-6 13:20
标题: static方法能被继承吗?为什么?
static修饰的方法能被继承吗?为什么?例如父类中有一个static修饰的方法,然后一个类继承了此类,那么子类类名可以直接调用static方法吗?如果可以的话,那这个static方法到底是存在父类中还是子类中?


作者: 秦桂胜    时间: 2013-11-6 13:57
static修饰的方法是可以被继承的,static修饰的代码块放在共享区,刚开始就进入内存,调用时可以用类名来调用,其实和一般方法被继承是一样的;
那么子类类名可以直接调用static方法,这个static方法是在子类中。
作者: 瓶中人    时间: 2013-11-6 14:22
本帖最后由 瓶中人 于 2013-11-6 14:23 编辑

static方法可以被继承,如父类定义一个方法,子类的实例也可以调用该方法

如下代码
package com.ping.test;
public class Son  extends Parent{  
               public static void main(String[] args) {
                               Son.say();            //输出I'm Parent    }   
}
class Parent {
            public static void say() {
                    System.out.println("I'm Parent");
      }
  }
但是,需要注意的是,静态方法不能被重写,静态方法没有多态的概念,如果子类定义了跟父类一样的静态方法,那么只是对父类方法的隐藏;



作者: 秦大忠    时间: 2013-11-6 15:55
static :
1、是一个修饰符,用来修饰成员,如成员变量,成员函数,当成员被静态修饰后,静态内容被对象所共享,这样做的好处是节约内存
2、当成员被静态修饰后,出来被对象调用外,还可以直接被类名调用,写法:类名.静态成员
3、静态修饰的对象存储在方法区或者说共享数据区
特点:
1、随着类的加载而加载,类的消失而消失
2、优先于对象存在,在new一个对象之前就存在了
3、被所在类的所有对象所共享
4、可以直接被类名直接调用
静态方法只能访问静态成员,静态方法中不可以定义this、super关键字,因为对象优先于对象存在
静态的使用:
1、因为静态修饰的内容有成员变量、成员函数,当功能中出现共享数据时,该数据被静态修饰,而对象中特有数据定义成非静态
2、当功能内部没有访问到非静态数据,那么该功能可以定义成静态的
子类对象可以继承父类的一切非私有的方法或属性,但对于私有的方法和属性需要间接地手段才可以,只要你这个静态方法不是私有的就可以被继承
3、当子类的成员变量与父类的成员变量同名时,子类的成员变量会隐藏父类的成员变量
4、当子类的方法和父类具有相同的名字、参数列表、返回值类型时,子类方法重写了父类中的方法,父类定义的方法被隐藏,当通过子类对象调用与父类中同名的变量和方法时。
操作的这些变量和方法在子类中定义




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