欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继承中的实例变量、静态变量、实例方法、静态方法被隐藏和被覆盖问题

程序员文章站 2024-03-22 09:15:22
...

       父类中的静态变量、实例变量、静态函数这三种会被子类的同名的静态变量、实例变量、静态方法所隐藏。

       父类中的实例方法会被子类相同的实例方法(重写的方法)所覆盖。

       所谓隐藏就是还有被运行的机会,覆盖基本已经玩完(但是也可以通过super进行调用)。

     下面通过一段代码进行详细的了解:

package T1;

import java.util.*;
class C{
	public int i=10;
	public static int j=100;
	public void f() {
		System.out.println("C的f函数");
	}
	public static void f1() {
		System.out.println("C的静态f1函数");
	}
}

class B extends C{
	public int i=9;
	public static int j=90;
	public void f() {
		System.out.println("B的f函数");
	}
	public static void f1() {
		System.out.println("B的静态f1函数");
	}
}

public class A {
	public static void main(String args[]) {
		B b=new B();
		b.f();
		b.f1();
		System.out.println("实例变量i="+b.i);
		System.out.println("静态变量j="+b.j);
		System.out.println("///////////////分界线呀");
		C c=new B();
		c.f();
		c.f1();
		System.out.println("实例变量i="+c.i);
		System.out.println("静态变量j="+c.j);
	}
}

B的f函数
B的静态f1函数
实例变量i=9
静态变量j=90
///////////////分界线呀
B的f函数
C的静态f1函数
实例变量i=10
静态变量j=100

分界线前面的那种就是直接使用子类的对象,那么父类的四种类型该隐藏的隐藏,该覆盖的覆盖。

分界线后面的使用的是一个父类指向了一个子类,那么那些被隐藏的静态变量、实例变量、静态方法就会被唤醒,也就是使用的是父类的,那个被覆盖的实例方法将不会被执行,仍然使用的是被覆盖后的,也就是子类中的。