黑马程序员_函数的两个特性(重写和重载)

------- android培训、java培训、期待与您交流! ----------

函数的两个特性(重写和重载)

第一部分

1、重载的概念

在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。换句话说重载和参数列表有关系,与返回值类型没有关系;

2、重载的特点

与返回值类型无关,只看参数列表。

3、重载的好处

方便于阅读,优化了程序设计。

4、什么时候使用重载

当定义的功能相同,但是参与运算的位置内容不同,那么这时就要定义一个函数名称以表示其功能,方便阅读而通过参数列表的不同来区分多个同名函数;

5、代码体现


class  FunctionOverload
{
	public static void main(String[] args) 
	{
//		函数名相同但是参数列表不同;这就是重载
		add(5,7);
		add(3,5,54);
		System.out.println("Hello World!");
	}
//	获取两个整数的和
	public static int add(int a,int b)
	{
		return a+b;
	}
//	获取三个整数的和
	public static int add(int a,int b,int c)
	{
		return a+b+c;
	}

}<strong>
</strong>

第二部分

1、背景

当子类中的方法名和父类中方法名是一样的时候,在主函数中创建子类对象,并调用父类的方法的时候,这是发现运算的结果是子类中的方法,父类中的方法并没有运行;

2、重写的概念

当子类出现和父类一模一样的函数时,子类中的对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样,这种情况就是函数的另一个特性:重写又成为覆盖;

3、覆盖的应用

当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽具备该功能,但是功能的内容却和父类不一致,这时就没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写功能内容。

4、覆盖的特点

沿袭父类内容,定义子类特有内容;

5、覆盖功能的好处

5.1、有利于功能扩展;

5.2、在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

5.3、父类中的私有方法不可以被覆盖。

6、覆盖的注意事项

6.1、子类覆盖父类时,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
6.2、静态只能覆盖静态,静态不能覆盖非静态,原因是静态在内存中是先加载的,而非静态是后加载进内存的;

7、代码体现

class Fu
{
	void show()
	{
		System.out.println("show fu");
	}
	void speak()
	{
		System.out.println("vb");
	}
}
//子类继承父类,通过覆盖后子类中就有了两个方法;
class Zi extends Fu
{
//	子类和父类speak的功能是相同的
	void speak()
	{
		System.out.println("java");
	}
	void show()
	{
		System.out.println("show zi");
	}
}
class ExtendsDemo3 
{
	public static void main(String[] args) 
	{
//		建立子类对象,调用父类方法;
		Zi z = new Zi();
		z.show();
		z.speak();
	}
}<strong>
</strong>


第三部分

重载和重写的区别

重载:只看同名函数的参数列表;
重写:子父类方法要一模一样,包括返回值类型;

第四部分

我的总结

1、重写是函数名相同,但是函数的参数列表不同,与返回值类型无关;
2、重载是子类和父类中的方法相同,子类中的方法覆盖父类中的方法,沿袭父类功能到子类中,在主函数中建立子类对象,调用父类方法;
3、在进行复写是时候,必须保证子类的修饰符权限要大于父类的修饰符权限,才能够复写;
4、静态只能覆盖静态,静态不能覆盖非静态;

发布了40 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/java9832/article/details/46400157