java的重载和重写的区别

前言:其实java的重载和重写没有什么联系,这是名字相似

1、重载和重写的实际应用举例

重载:

1、当定义方法的时候,“方法名”相同,“形参”不同时为重载

class Students(){
		int age;
		
		puclic int guessAge(){
			age  = 18;
			retuen age;
		}
		
		public int guessAge(int age){
			age = 29;
			return age;
		}
	}

重写(目的--父类命名过方法A后,子类想在方法A的基础上进行修改,所以增加了重写的概念):

1、当继承时,父类定义一个方法后, 子类继承后又想要修改父类中的此方法,需要用到重写;重写时,子类定义的方法和夫类定义的“方法名” 和“形参”必须相同,里面的内容不同; 

 Person类--父类

package com.test.p4;
public class Student extends Person{
	String major; //专业
	public Student(){

	}
	public Student(String name, int age, String major){
		this.name = name;
		setAge(23);
		this.major = major;
	}
	public void study(){
		System.out.println("student学习专业课");
	}
	public void print(){
		System.out.println("name: " + name + "  age: " + getAge());
	}

	public void eat(){
		System.out.println("测试重写,这是子类studnt类里写的吃");
	}

}

 Student类--子类

package com.test.p4;

public class Student extends Person{
	String major; //专业
	public Student(){

	}
	public Student(String name, int age, String major){
		this.name = name;
		setAge(23);
		this.major = major;
	}
	}

	public void eat(){
		System.out.println("测试重写,这是子类studnt类里写的吃");
	}

}

测试类

package com.test.p4;
public class ExtendsTest {
	public static void main(String[] args) {

		Student s1 = new Student();
		s1.eat();
	}
}


结果:

测试重写,这是子类studnt类里写的吃

Process finished with exit code 0

2、重写的规定介绍(方法名/权限修饰符/返回值)

  1. 子类重写的方法的“方法名”和“形参列表”父类被重写的“方法名”和“形参列表”相同(因为重写的意思就是重新写,如果形参不同就相当于重载了)
  2. 子类重写的方法的权限修饰符 不小于 父类被重写的方法的权限修饰符(相当于新的如果想要完全覆盖以前重新开始的化,必须要和原来的相同或者更大)

             特殊情况:子类不能重写父类中声明的private权限的方法(因为父类声明private权限后,相当于自己的隐私被隐藏了,子类是看不到的,因此无法重写)

             

      3. 返回值类型:

  • 父类被重写的方法的返回值是void,则子类重写的方法的返回值类型只能是void
  • 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类型或A类的子类
  • 父类被重写的方法的返回值类型是基本数据类型(如:double、int),则子类重写的方法的返回值类型必须是相同类型
  • 子类和父类中的同名同参数的方法要么都声明为static(此时可以考虑重写),要么都声明为static(此时不能考虑重写了)

注:权限修饰符相当于    父类 <= 子类;

         返回值类型相当于 父类 包括 子类 

猜你喜欢

转载自blog.csdn.net/weixin_46932303/article/details/115427693
今日推荐