`

方法和变量在继承时的覆盖与隐藏

    博客分类:
  • J2SE
 
阅读更多
public class Parent2 
{
	//类变量,Parent2的类别
	public static String kind = "com.baodian.unit2.Parent2";
	//类变量,Parent2的年龄
	public static int age = 50;
	//实例变量,Parent2的名字
	public String name = "Parent2";
	
	/**
	 * 静态方法,获取parent2的类别
	 * @return
	 */
	public static String getKind()
	{
		System.out.println("Parent2的getKind()方法被调用了");
		return kind;
	}
	
	/**
	 * 静态方法,获取Parent2的年龄
	 * @return
	 */
	public static int getAge()
	{
		System.out.println("Parent2的getAge()方法被调用");
		return age;
	}
	
	/**
	 * 实例方法,获取Parent2的名字
	 * @return
	 */
	public String getName()
	{
		//实例方法中操作的可以是实例变量,也可以是类变量
		System.out.println("Parent2的getName()方法被调用了!");
		return null;
	}
	
	/**
	 * final方法,将Parent年龄加1
	 * @return
	 */
	public final int nextAge()
	{
		return ++age;
	}
}

public class Child2 extends Parent2
{
	//类变量,Child2的类别
	public static String kind="com.baodian.unit2.Child2";
	//实例变量,Child2的年龄,在Parent2类中是static的
	public int age = 25;
	//实例变量,Child2的名字
	public String name="Child2";
	
	/**
	 * 静态方法,获取Child2的类别
	 * @return
	 */
	public static String getKind()
	{
		System.out.println("Child2的getKind()方法被调用了");
		return kind;
	}
	
	/**
	 * 静态方法,获取父类的名字
	 * @return
	 */
	public static String getParentKind()
	{
		//通过类名加"."访问父类中被隐藏的类变量
		return Parent2.kind;
	}
	
	/**
	 * 实例方法,获取Child2的名字
	 */
	public String getName()
	{
		System.out.println("Child2的getName()方法被调用了");
		return this.name;
	}
	
	/**
	 * 实例方法,获取父类的名字
	 * @return
	 */
	public String getParentName()
	{
		//通过super关键字父类中被隐藏的实例变量
		return super.name;
	}
	/*
	 * 错误!!!,实例方法不能覆盖父类的静态方法
	public int getAge()
	{
		return this.age;
	}
	*/
	
	/*
	 * 错误!!!父类的final方法不能够被覆盖
	public int nextAge()
	{
		return ++age;
	}
	 */
}

/**
 * 
 * 方法和变量在继承时的覆盖与隐藏
 */
public class CoverHideTest {
	public static void main(String args[])
	{
		//先测试继承时变量的覆盖与隐藏问题
		Child2 child = new Child2();
		System.out.println("child name:" + child.name + "; age:" + child.age +
				 "; kind:" + child.kind);
		//此处得到的都是Child2类的变量值
		//将child类型转换成Parent对象
		Parent2 parent = child;
		System.out.println("转换成Parent2后name:" + parent.name + "; age:" +
			parent.age + "; kind:" + parent.kind);
		//此处得到的都是Parent2类的变量值
		System.out.println();
		System.out.println("子类访问父类被隐藏的实例变量name: " + child.getParentName());
		System.out.println("子类访问父类被隐藏的静态变量kind: " + child.getParentKind());
		
		//再测试继承时方法的覆盖与隐藏问题
		System.out.println();
		child.getName();	//实例方法
		child.getKind();	//静态方法
		parent.getName();	//实例方法
		parent.getKind();	//静态方法
	}
}
分享到:
评论

相关推荐

    方法和变量在继承时的覆盖和隐藏问题

    然而,在继承过程中,可能会出现方法和变量的覆盖(Override)和隐藏(Hide)问题。这个问题对于理解Java类的继承机制和代码的运行行为非常重要。 首先,需要明确几个概念:覆盖与隐藏。方法覆盖发生时,子类提供一...

    Java中的方法和变量在继承时的覆盖问题

    变量和方法覆盖和隐藏的不同:一个类的实例无法通过使用全局名或者强制自己转换为父类型,以访问父类中被隐藏的方法,然而强制转换子类为父类型之后,可以访问父类中被隐藏的变量。另外静态方法不能覆盖父类的实例...

    Java方法继承、方法重载、方法覆盖总结

    7. **覆盖与隐藏的区别**: 当子类中定义了一个与父类同名但参数列表不同的方法时,这实际上是一种“隐藏”,而非覆盖。 #### 四、super关键字 **super关键字**在Java中用于指代当前对象的直接父类对象。它主要用于...

    区分Java的方法覆盖与变量覆盖

    在Java中,当子类中定义了一个与父类方法完全匹配的方法时,子类的方法就会覆盖父类的方法。例如,在给定的示例中: ```java public class People { public String getName() { return "people"; } } public ...

    1.继承的本质和原理 2.派生类的构造类型 3.重载、覆盖、隐藏 4.静态绑定和动态绑定 5.多态 vfptr和vftbale

    继承的本质和原理是面向对象编程中的核心概念,它允许建立一个类(称为派生类或子类)来继承另一个类(称为基类或父类)的属性和方法。继承促进了代码复用,并有助于实现分类和层次结构。继承还允许派生类扩展基类的...

    Java方法的覆盖与隐藏的区别分析

    - 当子类继承父类并重写了一个非静态(非final)方法时,我们称作方法覆盖。覆盖的条件是子类的方法签名必须与父类被覆盖的方法完全相同,包括方法名、参数列表和返回类型。 - 在上面的代码示例中,`Cat`和`Dog`类...

    java类的继承详解说明

    继承是指一个类继承另一个类的成员变量和方法,使得子类可以获得父类的所有成员变量和方法,并在此基础上增加自己的成员变量和方法。继承的关键字是 extends,它表示子类继承自父类。 继承的实现 Java 中的继承是...

    论JAVA继承机制中父类与子类的关系

    成员的隐藏与覆盖 - **成员变量的隐藏**:子类中定义的与父类同名的成员变量会隐藏父类中的同名成员变量。这意味着在子类内部,使用变量名时会优先引用子类的成员变量。 - **方法的覆盖**:子类中定义的与父类同名...

    实验四:Java继承与接口

    本资源摘要信息将对Java继承与接口进行详细的讲解,包括继承原理与机制、类继承的声明方法、成员变量的隐藏及方法的重写、抽象类与抽象方法、super和final关键字、多态的内涵及实现代码、接口的声明和使用等。...

    java练习册(012)--类的继承(1)分享.pdf

    1. 练习目标:掌握类继承的基本操作,包括创建子类、继承成员、隐藏和覆盖方法等。 2. 时间安排:建议分配180分钟进行练习,翻译部分写在JAVA笔记本上,书面作业写在JAVA家庭作业本上。 3. 错误预防:在编写代码时,...

    C#子类对基类方法的继承、重写与隐藏详解

    当我们在子类实例调用这个方法时,实际上调用的是基类的方法。 二、子类覆盖基类方法 在C#中,子类可以覆盖基类的方法,这是最常见的情况。例如: ```csharp class Person{ public virtual void Greeting() { ...

    Java 接口与继承

    `this`和`super`常常用于解决成员变量的隐藏和方法的覆盖问题,尤其是在构造方法中调用其他构造方法或父类的构造方法时。 总的来说,继承和接口是Java中实现代码复用、模块化和扩展性的核心工具。通过合理利用这些...

    java继承与多态教学及练习

    1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字

    理学继承接口与泛型PPT课件.pptx

    - 在方法中,`super.成员名`用来访问父类的隐藏成员或被覆盖的方法。 6. **泛型**: - 泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,增强了代码的类型安全性和重用性。 - 泛型可以避免类型...

    Java面向对象程序设计--继承与接口.pptx

    成员变量的隐藏发生在子类中声明了与父类同名的变量时,子类会优先使用自己定义的变量,而隐藏父类的变量。方法重写(Override)则发生在子类提供与父类相同名称和签名的方法,以便为特定的子类行为提供不同的实现。...

    实验九-子类和继承1.doc

    虽然没有给出具体的错误代码,但常见的错误可能包括:构造器不匹配、访问权限冲突、未初始化的变量、重写方法时签名不一致等。修复这些错误通常涉及调整访问修饰符、添加构造器参数、正确调用`super`或确保方法签名...

    java---- 封装,接口,继承,覆盖,构造过程,多态,static、this、super、final用法

    在Java中,多态可以通过继承和方法覆盖来实现。 **特点:** - **方法覆盖实现多态:** 子类可以覆盖父类的方法,根据运行时的对象类型动态决定调用哪个方法。 - **接口实现多态:** 实现接口的多个类可以拥有相同的...

    java中重载、覆盖和隐藏三者的区别分析

    隐藏发生在父类和子类之间,当子类中存在与父类同名的成员变量或静态方法时,父类的成员变量或静态方法在子类中被隐藏,但并未真正消失。父类和子类的实例变量/静态变量可以交叉隐藏,也就是说,如果子类有一个与...

    C++的重载、隐藏、覆盖规则

    **隐藏**发生在继承关系中,当子类定义了一个与基类同名的成员(函数或变量)时,基类的同名成员在子类的作用域内被“隐藏”。这意味着在子类中直接调用这个名字时,将调用子类的成员,而不是基类的成员。例如: ``...

Global site tag (gtag.js) - Google Analytics