java知识第五讲

java中的方法重载与方法重写

之前在java知识第三讲中提到过方法重载(Overload),而在java中还有一个方法重写(Override),一字之差,却各不相同。

方法重载
方法重载(Overload):表示两个方法或多个方法名字相同,但方法的参数不同。
参数类型不同
参数顺序不同
参数个数不同。

public  class Test{
	public int add(int a){
		System.out.println(a);
		return a;
	}
	public void add(int a,int b){
		System.out.println(a+b);
	}
	public void add(int a,int b,int c){
		System.out.println(a+b+c);
	}
	public static void main(String []args){
	Test test=new Test();
	test.add(4);
	test.add(4, 7);
	test.add(5, 6, 7);
	}
}
输出结果:
4
11
18

方法重写
方法重写(Override):在子类继承父类时,子类的方法与父类的方法相同(子类与父类的方法返回类型一样、方法名称一样、参数一样),只是方法体不同,这时子类的方法会将父类的方法覆盖,这样我们说子类与父类的方法构成了重写关系。

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		son.run();
	}
}
class Father {
	public void run() {
		System.out.println("Father");
	}
}
class Son extends Father {
	public void run() {
		System.out.println("Son");
	}
}

输出结果:

Son

1、 此时注意下方这个不是重写,是因为子类从父类中继承了run()方法,而本身自带一个带参数的run(int i)的方法,所以只能说子类对父类的run方法进行了重载,此时子类中有两个run方法,一个带参数,一个不带参数.

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		son.run(2);//如果使用带参数,那么输出结果:Son
		son.run();//如果使用不带参数的方法,那么输出结果:Father
	}
}
class Father {
	public void run() {
		System.out.println("Father");
	}
}
class Son extends Father {
	public void run(int i) {
		System.out.println("Son");
	}
}

2、方法重写与方法重载之间的关系:重载发生在同一类内部两个或多个方法。重写发生在父类与子类之间。重载时一种平行关系,重写是一种层次关系,伴随着继承而发生。

3、当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句【此处的super.run()与super();是不同的】,因此此时父类的对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法根据程序逻辑决定的。

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		son.run();
	}
}

class Father {
	public void run() {
		System.out.println("Father");
	}
}

class Son extends Father {
	public void run() {
		super.run();//调用父类run()方法
		System.out.println("Son");
		
	}
}

输出结果:

Father
Son

4、在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是java中所有的类的直接或间接父类)。

继承中的调用顺序

public class Test {
	public static void main(String[] args) {
		Son son = new Son();
		son.run();
	}
}

class GrandPa{
	public void run(){
		System.out.println("Grandpa");
	}
}
class Father extends GrandPa{
	public void run() {
		super.run();
		System.out.println("Father");
	}
}

class Son extends Father {
	public void run() {
		super.run();
		System.out.println("Son");
		
	}
}

输出结果:

GrandPa
Father
Son
发布了45 篇原创文章 · 获赞 38 · 访问量 2166

猜你喜欢

转载自blog.csdn.net/qq_44830627/article/details/104757243
今日推荐