`
michelecindy
  • 浏览: 173114 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

方法的重写和重载

    博客分类:
  • Java
阅读更多
java语言中的概念就是多,这回又有两个概念,重载和重写。这是两个新概念,也是两个令初学者容易混淆的概念。他们的概念截然不同,只不过都有个“重”字,就以为是很像的。下面解释一下这两个概念:

    方法重载(overloading method) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。

    方法重写(overiding method) 子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。如果还是搞混的话,就把“重写覆盖”,这个词多念几遍吧。知道是覆盖的话,就知道是子类覆盖父类的方法了。

实践: 重载的例子
package ceshi;

public class MethodOverloading {
	void recieve(double d) {
		System.out.println("接收一个int数据");
		System.out.println("i=" + d);
	}

	void recieve(float f) {
		System.out.println("接受一个float型的数据");
		System.out.println("f=" + f);
	}

	void recieve(String s) {
		System.out.println("接受一个String型数据");
		System.out.println("s=" + s);
	}

	public static void main(String[] args) {

		MethodOverloading m = new MethodOverloading();

		m.recieve(3456);

		m.recieve(34.56);

		m.recieve("百家拳软件项目研究室");

	}
}



大家看到了上面的例子方法receive()有三个,名字相同参数不同。这样的话,在main()调用的时候,参数用起来就很方便了。重写的例子似乎不用举了,记不住的话,就和“覆盖”。一起念。

    有时候,重载和重写的方式有些复杂,在jdk5里面。有一些方式能简化一些。我们来看看吧,jdk5的可变参数。 如果把相同参数类型的方法重载好几遍真的是很烦。就一个方法,pri(String args), pri(String arg0 ,String arg1), pri(String arg0,String arg1,String arg2), pri(String arg0,String arg1,String arg2,String arg3)。这样的话会写很多烦琐的代码。现在jdk5可以,用“…”来代替这些参数。实践:
package ceshi;

public class overload {
	//若干个相同类型的参数,用“...”代替 
	public void pri(String... strings) {
		for (String str : strings)
			//for这个循环语句也有迭代的意思 
			System.out.print(str);

	}

	public static void main(String[] args) {
		new overload().pri("100jq", " 百家拳软件项目研究室", " www.100jq.com");
	}

}


上述例子打包下载

jdk5的方法重写,比以前多了一个叫做协变返回的概念。在以往jdk的版本中,还有一个比较让人讨厌的地方。方法重写确实是比较不错的机制,如果想用父类的方法,写个super就可以了,如果不想用父类的方法就重写覆盖。但是重写覆盖的返回类型不能覆盖,父类的类型不够用怎么办,我们想在子类重写它的类型可以吗?现在可以了。看下面的例子:
class Point2D { // 定义二维的点

	protected int x, y;

	public Point2D() {

		this.x = 0;

		this.y = 0;
	}

	public Point2D(int x, int y) {

		this.x = x;

		this.y = y;

	}
}

// 定义三维的点,继承二维

class Point3D extends Point2D {

	protected int z;

	public Point3D(int x, int y) {

		this(x, y, 0);

	}

	public Point3D(int x, int y, int z) {

		this.x = x;

		this.y = y;

		this.z = z;

	}
}

// 定义二维的位置

class Position2D {

	Point2D location;

	public Position2D() {

		this.location = new Point2D();

	}

	public Position2D(int x, int y) {

		this.location = new Point2D(x, y);

	}

	public Point2D getLocation() {

		return location;

	}
}

// 定义三维的位置,继承二维的位置

class Position3D extends Position2D {

	Point3D location; // 在这里已经变成Point3D的类型了

	public Position3D(int x, int y, int z) {

		this.location = new Point3D(x, y, z);

	}

	@Override
	// 注释是重写方法
	public Point3D getLocation() {

		return location; // 返回是子类的类型而不是原来的类型了

	}

}
分享到:
评论

相关推荐

    JAVA中的方法重写与方法重载区别

    方法重写和方法重载的区别在于,方法重写是指子类对父类方法的重写,而方法重载是指类中多个方法的重载。方法重写是面向对象程序设计语言中多态性的体现,而方法重载是 JAVA 语言中的一种特殊机制。 在 JAVA 中,...

    方法重载和方法重写

    在编程语言中,方法重载(Overloading)和方法重写(Overriding)是两个非常重要的概念,它们都是实现多态性(Polymorphism)的关键机制。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 ### 方法重载...

    Java重写和重载概念及区别梳理

    在编程语言中,Java的重写(Override)和重载(Overload)是两个非常重要的概念,它们在类与对象的多态性中起到关键作用。理解并掌握这两个概念是成为一名合格的Java开发者的基础。 首先,我们来谈谈重写(Override...

    重写和重载的区别

    在面向对象编程中,方法的重写(Overriding)和重载(Overloading)是非常重要的概念。这两种机制可以帮助程序员更灵活地管理和组织代码,提高代码的复用性和可扩展性。 #### 二、重载(Overloading) **定义:** ...

    C#重写重载与多态

    在C#编程语言中,重写、重载和多态是面向对象编程的三大核心特性,它们对于构建灵活、可扩展的代码结构至关重要。 首先,我们来看“重写”。重写(Override)允许子类对从基类继承来的方法进行重新定义,以便提供...

    重写(override)和重载(overload)的区别

    在C#编程语言中,重写(Override)和重载(Overload)是两种非常重要的概念,它们分别涉及对象多态性和方法的可选性。理解这两者的区别对于编写高效且易于维护的代码至关重要。 首先,让我们深入了解一下重写(Override)...

    JAVA重写和重载.pdf

    JAVA重写和重载(Overriding和Overloading) JAVA中有两种不同的多态性表现形式:重写(Overriding)和重载...在实际应用中,重载和重写都是JAVA多态性的一种表现形式,都是为了提高代码的灵活性和可扩展性。

    重载与覆写/重写的区别

    方法重载只可以通过方法名和方法参数来区别,即“方法签名” * @return * @throws NumberFormatException */ public int getSides(Object obj) throws NumberFormatException { return 1; } /** * 2....

    编程技能训练与等级考试辅导:方法重写与重载.pptx

    在编程领域,方法重写(Override)和方法重载(Overload)是两个重要的概念,主要涉及面向对象编程。这两个概念对于理解和实现类的继承、多态性等核心概念至关重要。 **方法重写(Override)**: 方法重写发生在...

    Java方法重载和重写原理区别解析

    "Java方法重载和重写原理区别解析" Java 是一种面向对象的编程语言,方法重载和重写是两个非常重要的概念,它们都是Java编程语言中的一部分。本文主要介绍了Java方法重载和重写原理区别解析,通过示例代码介绍的...

    Java中方法重写与方法重载的比较.pdf

    理解并熟练掌握方法重写和方法重载是Java编程中的基本技能,它们对于实现多态、代码复用以及提高程序的灵活性和可维护性至关重要。在实际编程中,应根据需求灵活运用这两个特性,以编写出高效且易于维护的代码。

    Java重写与重载(区别与用途)

    我根据我的理解来谈谈Java中重写方法与重载方法的区别。  重写  Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...

    Java方法重载和方法重写的区别.docx

    Java编程语言中,方法的两种重要特性是方法重载(Overloading)和方法重写...理解并熟练运用方法重载和方法重写是成为Java开发人员的关键技能,它们在实现面向对象设计原则,如封装、继承和多态时起着至关重要的作用。

    java中的重载和重写的区别

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们体现了Java的多态性。多态性是面向对象编程的三大特性...通过熟练掌握重载和重写,你可以更好地设计和实现灵活、可扩展的代码结构。

    重写和重载的区别.xmind

    重写和重载的区别

    Java中方法重载与重写的区别

     (1)子类的方法的名称及参数必须和所重写的方法完全相同。  (2)子类的方法返回类型必须和所重写的方法相同。  (3)子类方法不能缩小所重写方法的访问权限。  (4)子类方法不能抛出比所覆盖方法更多的...

    Java 2023.7.12(方法重写/重载、多态、抽象类/方法、instanceof)

    在Java编程语言中,方法重写(Method Overriding)和重载(Method Overloading)、多态(Polymorphism)、抽象类(Abstract Class)与抽象方法(Abstract Method)以及`instanceof`关键字是核心的面向对象特性。...

    Java中重载和重写总结

    Java 中重载和重写总结 Java 中的重载(Overloading)和重写(Overriding)是两个非常重要的概念,它们都是多态性的体现形式。 一、Java 中的重载(Overloading) Java 中的重载是指在同一个类中可以创建多个...

    方法的重载和重写1

    在编程语言中,方法的重载(Overloading)和重写(Overriding)是两种不同的多态性表现,它们在类的继承体系中扮演着重要角色。本文将深入探讨这两种概念,以及它们在实际编程中的应用和规则。 首先,我们来看方法...

Global site tag (gtag.js) - Google Analytics