您的位置:首页 > 编程语言 > Java开发

Java基础之子类会不会继承父类的static变量和static方法

2017-04-07 22:13 435 查看

1 相关问题

(1)应用父类静态字段会不会初始化子类?

(2)父类的静态方法能不能被子类重写?

(3)父类的静态变量被继承后,子类修改静态变量,为什么父类的也跟着变了?

2 解决思路-不能

2.1 概念

(1)重写:子类继承父类后,定义了一个和父类中的一模一样方法,这个一模一样是值方法名和参数的定义一模一样。这时候子类要实现这个方法,就称为对父类方法的重写。

(2)重载:子类继承父类后,定义了一个和父类中相同名字的方法,但是参数不一样(必须),实现也不同(可选),这就是重载。

(3)静态方法:java中,static修饰符修饰的方法就是静态方法。所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。static类型的变量是归类所有,不是类的实例所有,一般用类名引用。

2.2 原因

  因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。

  子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说,我们应该称之为隐藏。

3 演示

(1)代码

class Base {
public static int countBase = 111;
public static int count = 0;
}

class ClassOne extends Base {
public static int count = 1;
}

public class Test {
public static void main(String args[]) {
System.out.println("父类引用父类countBase值:" +Base.countBase);
System.out.println("子类引用父类的countBase值:" +ClassOne.countBase + "\n");

System.out.println("父类原来的count值:" +Base.count);
System.out.println("子类原来的count值:" + ClassOne.count);
ClassOne.count++;
System.out.println("父类加1后的count值:" + Base.count);
System.out.println("子类加1后的count值:" + ClassOne.count);
}
}


(2)结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐