`
Scliu123
  • 浏览: 41391 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(方法与变量在继承时的覆盖和隐藏)

阅读更多

父类

 

package book.oo.coverhide;

public class Parent {
	/** 类变量,Parent的类别 */
	public static String kind = "book.oo.coverhide.Parent";
	/** 类变量,Parent的年龄 */
	public static int age = 50;
	/** 实例变量,Parent的名字 */
	public String name = "Parent";

	/** 静态方法,获取Parent的类别 */
	public static String getKind() {
		//静态方法中操作的只能是类变量
		System.out.println("Parent的getKind()方法被调用了!");
		return kind;
	}
	/** 静态方法,获取Parent的年龄 */
	public static int getAge() {
		System.out.println("Parent的getAge()方法被调用了!");
		return age;
	}
	/** 实例方法,获取Parent的名字 */
	public String getName() {
		//实例方法中操作的可以是实例变量,也可以是类变量
		System.out.println("Parent的getName()方法被调用了!");
		return this.name;
	}
	/** final方法,将Parent的年龄加1*/
	public final int nextAge(){
		return ++age;
	}
}

 

子类

 

package book.oo.coverhide;

public class Child extends Parent {

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

 

 

测试类

package book.oo.coverhide;

public class CoverHideTest {

	public static void main(String[] args) {
		// 类变量是指变量属于类,通过类名就可以访问类变量
		// 实例变量是指变量属于类的实例即对象,通过对象可以访问实例变量,但是通过类名不可以访问实例变量
		// 同样静态方法属于一个类,通过类名就可以访问静态方法,而实例方法属于对象,通过对象访问实例方法

		// 所谓隐藏是指,子类能隐藏父类的变量和方法,通过子类对象,不能访问父类被隐藏了的变量和方法,
		// 但是将子类对象转换成父类对象时,可以访问父类中被隐藏的变量和方法
		// 而覆盖则指,子类能覆盖父类的方法,通过子类对象,不能访问父类被覆盖了的方法,
		// 将子类转换成父类对象时,也不能访问父类中被隐藏的方法。
		// 方法可以被隐藏和覆盖,但是变量只可能被隐藏,不会被覆盖

		// 先测试继承时变量的覆盖与隐藏问题
		Child child = new Child();
		System.out.println("child name: " + child.name + "; age: " + child.age
				+ "; kind: " + child.kind);// 此时得到的都是Child类的变量值
		// 将child类型转换成Parent对象,
		Parent parent = child;
		System.out.println("转换成Parent后name: " + parent.name + "; age: "
				+ parent.age + "; kind: " + parent.kind);// 此时得到的都是Parent类的变量值
		/**
		 * 结论:父类的实例变量和类变量能被子类的同名变量隐藏。将子类对象转换成父类对象后,可以访问父类的实例变量和类变量
		 * 在子类中若需要访问父类中被隐藏的实例变量,需要使用super关键字。
		 * 在子类中若需要访问父类中被隐藏的类变量,需要使用父类的名字加"."来访问
		 */
		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();// 静态方法
		/**
		 * 结论:父类的静态方法被子类的同名静态方法隐藏;而父类的实例方法被子类的同名实例方法覆盖!
		 * 将子类对象转换成父类对象后,可以访问父类的静态方法,但是不能够访问父类的实例方法。
		 * 
		 * 试图用子类的静态方法隐藏父类中同样标识的实例方法是不合法的,编译器将会报错
		 * 试图用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的,编译器会报错
		 * 静态方法和最终方法(带关键字final的方法)不能被覆盖
		 * 
		 */

	}

	// child name: Child; age: 25; kind: book.oo.coverhide.Child
	// 转换成Parent后name: Parent; age: 50; kind: book.oo.coverhide.Parent
	//
	// 子类访问父类中被隐藏的实例变量 name:Parent
	// 子类访问父类中被隐藏的静态变量 kind:book.oo.coverhide.Parent
	//
	// Child的getName()方法被调用了!
	// Child的getKind()方法被调用了!
	// Child的getName()方法被调用了!
	// Parent的getKind()方法被调用了!

}

 

分享到:
评论

相关推荐

    java_JDK_实例开发宝典

    总的来说,"java JDK实例开发宝典"是一本全面的实战指南,它将理论与实践相结合,帮助开发者在实践中提升技能,加深对Java语言的理解。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过实际操作和调试这些...

    Linux版本JDK1.8.0_92版本

    总之,Linux版本的JDK1.8.0_92是Java开发和运维的重要工具,其在功能、性能和易用性上都进行了显著的提升,为开发者和运维人员提供了更高效的开发和管理环境。无论是进行企业级应用开发还是部署大规模服务,JDK1.8.0...

    jdk1.8.0_162.tar.gz

    在Linux系统中,解压"jdk1.8.0_162.tar.gz"后,通常会将其安装在/usr/lib/jvm目录下,并设置环境变量JAVA_HOME、PATH和CLASSPATH,以便系统能够正确识别和使用JDK。安装过程涉及创建软链接、配置.bashrc文件等步骤,...

    jdk1.7.0_45安装版

    7. **方法和动态代理接口**:允许在接口中定义默认方法,这为实现多继承提供了途径,并且增强了动态代理的灵活性。 **JDK 1.7.0_45 安装步骤** 1. **下载**:首先从Oracle官方网站或者其他可靠的源下载JDK 1.7.0_...

    java JDK 实例开发宝典

    在学习Java JDK实例开发时,我们需要关注以下几个关键知识点: 1. **环境变量配置**:正确设置JAVA_HOME、JRE_HOME、PATH等环境变量是确保JDK能正常工作的重要步骤。 2. **基本语法和控制结构**:学习Java的基本...

    JDK_API_1_6_zh_CN中文版

    8. **反射机制**:Java反射API允许在运行时动态地获取类的信息并操作其对象,包括创建类的实例、调用方法、访问和修改字段。 9. **国际化与本地化**:Java提供了ResourceBundle和Locale类来支持全球化应用,使程序...

    java jdk 实例宝典(光盘源码)

    9. **反射与注解**:学习如何在运行时检查类的信息(如方法、属性),以及如何使用注解进行元数据声明。 10. **JVM内部机制**:通过实例了解JVM的工作原理,包括类加载、内存模型、垃圾回收等,有助于优化程序性能...

    JavaSE_JDK_API_中文版

    7. **方法(Methods)**:方法是类或接口中定义的操作,包括静态方法和实例方法。每个方法都有一个返回类型、一个方法名和一组参数。 8. **构造函数(Constructors)**:类的实例化过程由构造函数完成,每个类可以...

    JDK_API_1_5_zh_CN.CHM

    4. **变量长度数组(Variable-Length Arrays)**:在方法签名中,现在可以使用`varargs`关键字定义可变数量的参数,如`public void printNumbers(int... numbers)`,这使得调用方可以传入任意数量的int值。 5. **...

    JAVA JDK实例宝典

    《JAVA JDK实例宝典》是一本全面覆盖Java开发核心领域的指南,旨在帮助开发者深入理解和熟练应用JDK中的各种工具和技术。书中的内容丰富多样,涵盖了从基础语法到高级特性的各个方面,以下是各部分的主要知识点: 1...

    java jdk经典实例

    Java JDK经典实例是Java初学者不可或缺的学习资源,它包含了169个精心挑选的案例,覆盖了JDK中的大部分功能和细节。通过这些实例,学习者可以深入理解Java语言的核心特性,提升编程技能。以下是对这些知识点的详细...

    jdk_1_5_0-API_CN 请大家下载查看此文件

    枚举可以包含常量、方法和字段,且支持继承和接口实现。 四、变量注解 注解是一种元数据,可以附加到类、接口、字段或方法上,提供有关这些元素的附加信息。JDK 1.5.0引入了标准注解,如`@Override`(标记重写父类...

    jdk1.8 64位官方正式版打包下载 jdk-8u131 x64 x86

    在类型推断方面,Java 8引入了钻石操作符(),使得在创建泛型实例时可以省略类型参数,编译器会自动推断出类型,简化了代码编写。 日期和时间API也得到了彻底的改造。新的java.time包取代了旧的java.util.Date和...

    java JDK 实例开发宝典.rar

    Java JDK实例开发宝典是一本深入探讨Java编程的资源集合,尤其适合初学者和有经验的开发者提升技能。这本书的核心价值在于它提供的源代码实例,让读者能够在实践中学习和理解Java语言的各个方面。 首先,Java JDK是...

    JAVA+JDK实例开发宝典

    "JAVA+JDK实例开发宝典"这个资源很可能包含了一系列有关Java编程、JDK使用以及实际开发中的案例,这对于初学者和进阶者来说都是极其宝贵的学习材料。JDK(Java Development Kit)是Java开发的核心工具集,它提供了...

    [Java参考文档].JDK_API_1_6_zh_CN.zip

    《Java参考文档》是Java开发者的必备资源,它详尽地介绍了Java Development Kit (JDK) 1.6版本中的各种类库、接口、方法和API。这份文档以中文版的形式提供,使得中国开发者能够更方便地理解和使用Java语言。 在JDK...

    JAVA JDK实例开发宝典源码

    Java JDK实例开发宝典源码是一份非常宝贵的资源,它涵盖了Java编程语言的各个方面,旨在帮助开发者深入理解和熟练运用Java JDK。这份源码集合包含了众多的实际示例,可以帮助初学者和经验丰富的开发者巩固基础,提升...

    Java JDK 实例宝典

    Java JDK实例宝典是一份深度探索Java开发工具包(Java Development Kit)的综合资源,它为Java程序员提供了大量实例,帮助他们深入理解JDK的各种功能和用法。这份宝典涵盖了从基础到高级的Java编程概念,是学习和...

    JAVA JDK 实例宝典_源文件.rar

    这本书涵盖了JAVA JDK中的各种核心概念、工具和技术,旨在帮助读者通过实例学习和理解JAVA编程语言的基础以及JDK的强大功能。书中提供的源文件是配套的学习资源,允许读者亲手实践,加深对知识点的理解。 首先,...

Global site tag (gtag.js) - Google Analytics