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

1 相关问题

(1)应用父类静态字段会不会初始化子类?
(2)父类的静态方法能不能被子类重写?
(3)父类的静态变量被继承后,子类修改静态变量,为什么父类的也跟着变了?

2 解决思路-不能

2.1 概念

(1)覆盖,又称重写(Override)。发生在子类与父类之间。

子类是可以继承父类的某些方法的,当父类的方法对子类不适用时,需要在子类中写一个和父类一样的方法(当然方法内的程序块是不一样的),此处**“一样”指方法名必须一样、返回值类型互相兼容、参数个数顺序类型必须一致等等**。此时如果子类要用这一方法,就会直接调用覆盖过的方法,而当没有检测到重写时,才会调用从父类继承下来的方法。举例子:因为不同动物的叫声和食物都不同,所以要将父类中的方法覆盖掉。
在这里插入图片描述

(2)重载(Overload)。一般发生在同一类的不同方法间。

重载要求两个方法方法名一样,参数列表不一样(类型、顺序、个数等)。这样两个方法间互为不同的方法,调用哪一个时由参数决定。

注意:重载与返回参数无关

class A {
	void a(int i, float j) { }
	void a(float i, int j) { }  // 两个方法接收的参数类型顺序不同,所以是两个不同的方法
}
class B {
	void b(int i) { }
	void b() { } // 参数个数不同,第二个方法无参数
}
class C {
	void c(int i) { }
	void c(float i) { } // 参数类型不同
}

java父子类之间是否存在重载的现象?

(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)结果

这里写图片描述

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值