`

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

    博客分类:
  • 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();	//静态方法
	}
}
分享到:
评论

相关推荐

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

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

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

    最近有个同学问了我一个小问题,觉得很有意思,之前一直没有想到过。他说“java中存在方法覆盖,是否存在变量的覆盖呢?”。

    java继承与多态教学及练习

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

    Java源码小合集:继承和多态相关的例子.rar

    继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...

    Elevenyxy.zip

    (实现各方法时做简单的打印即可) 练习(提高): 1定义一个抽象类Role,有姓名、年龄、性别等成员变量,要求: 尽可能隐藏所有变量,再通过GetXXX()和SetXXX()方法对各变量进行读写; 至少定义两个构造...

    继承与接口的含义以及其子类相关的含义

    继承与接口含义,子类的继承性的访问控制,子类对象的构造过程,子类的内存分布,子类对象的成员初始化,成员变量的隐藏,方法的重载与方法的覆盖,this关键字。。。。。。

    【04-面向对象(上)】

    •局部变量仅在方法内有效。 •当方法执行完成时,局部变量便会自动销毁。 封装 •理解封装:封装是面向对象的三大特征之一。 • 封装包含两方面含义:  –合理隐藏。  –合理暴露。 本文原创作者:...

    Java入门教程(微学苑)-part1

    4.3 调用隐藏变量和被覆盖的方法 63 4.4 调用父类的构造方法 64 4.5 继承中的方法的覆盖和重载 65 4.6 多态和动态绑定 66 4.7 动态绑定 69 4.8 instanceof 运算符 70 4.9 多态对象的类型转换 71 4.10 Java static...

    10个java主题

    10个JAVA主题,Item 1: 什么... 避免落入隐藏变量成员的陷阱 Item 7: 提前 Item 8: 设计可继承的构造函数 Item 9: 通过引用传递基本类型 Item 10: 布尔运算符与短路运算符本

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    Java开发技术大全 电子版

    4.3属性隐藏和方法的覆盖148 4.3.1属性的隐藏148 4.3.2方法的覆盖151 4.4构造方法的继承154 4.5super的使用156 4.5.1用super引用父类的成员156 4.5.2使用super调用父类的构造方法157 4.6继承的内部处理158 ...

    net学习笔记及其他代码应用

    29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。 public void test(int i) { lock(this) { if (i>10) { i--; test(i); } } } 答:不会发生死锁,(但...

    corejava培训文档

    6.8. 数据和方法的隐藏―――封装 6.9. 方法的重载 7. 六 高级语言特性 7.1. 封装 (encapsulation) 7.2. 继承 (inherit) 7.2.1. JAVA继承特点 7.2.2. 父类(SuperClass)和 子类(SubClass)的关系 7.2.3. ...

    疯狂JAVA讲义

    5.4 隐藏和封装 132 5.4.1 理解封装 132 5.4.2 使用访问控制符 132 5.4.3 package和import 135 5.4.4 Java的常用包 140 5.5 深入构造器 140 5.5.1 使用构造器执行初始化 141 学生提问:构造器是创建Java对象...

    Think in Java(中文版)chm格式

    2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 ...

    JAVA_Thinking in Java

    2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入...

    Java初学者入门教学

    2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入...

    java联想(中文)

    2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入...

    ThinkInJava

    2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入...

Global site tag (gtag.js) - Google Analytics