java父类子类变量及方法继承问题

java 专栏收录该内容
5 篇文章 0 订阅

java父类子类变量及方法继承问题

1.变量的类型

1.类变量:static variable,每个类共用一个,在类创建时创建,从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;
2.实例变量:instance variable,每个对象(实例)都有其各自的。从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
3.局部变量:local vaviable,不存在父子类的继承。

2.变量及方法的继承

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		System.out.println(Son.staStr);
		System.out.println(son.str);
		son.show();
		Son.stashow();
	}
}
class Parent{
	static String staStr = "This is parent's static variable";
	String str = "This is parent's instance variable";
	public void show(){
		System.out.println("This is parent's methods");
	}
	public static void stashow(){
		System.out.println("This is parent's static methods");
	}
}
class Son extends Parent{
	static String  staStr = "This is son's static variable";
	String str = "This is son's instance variable";
	public void show(){
		System.out.println("This is son's methods");
	}
	public static void stashow(){
		System.out.println("This is son's static methods");
	}
}

结果:
This is son’s static variable
This is son’s instance variable
This is son’s methods
This is son’s static methods
如果把Son中所有内容注释掉,结果为:
This is parent’s static variable
This is parent’s instance variable
This is parent’s methods
This is parent’s static methods
结论:子类会继承父类的类变量,实例变量和静态非静态方法。但是,如果子类有重名的变量或方法,会覆盖掉父类的。

多态情况

上面的代码做如下修改

Parent son = new Son();

结果为:
This is son’s static variable
This is parent’s instance variable
This is son’s methods
This is son’s static methods

我们用一个父类的变量子类的实例时,如果调用变量,则会根据变量的类型来决定是调用父类还是子类里的变量;子类同名方法会覆盖父类同名方法。

3.静态的方法和变量

对于静态,static关键字修饰的方法和变量都是属于类自己本身的,子类并没有继承父类的static修饰的变量和方法,所以说即使子类和父类中都有同样的static方法和变量,他们是没有任何关系的,他们是相互独立的,他们是属于各自类本身的。因此也是不存在多态特性的。而对于普通方法的调用是存在“重写”而最终呈现出多态特性的。
1)子类是不继承父类的static变量和方法的。因为这是属于类本身的。但是子类是可以访问的。
2)子类和父类中同名的static变量和方法都是相互独立的,并不存在任何的重写的关系。

一个小问题

		Parent son = new Son();
		son.stashow();

结果为:
This is parent’s static methods

		Parent son = new Son();
		Son.stashow();

结果为:
This is son’s static methods

直接用对象调用静态方法,虽然写法不好,但是应该和类调用结果一样的,但是结果却不一样。暂时不清楚为什么?大佬明白的话可以指点一下。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值