栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java方法覆盖与方法重载介绍及其区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java方法覆盖与方法重载介绍及其区别

Ps:括号中的内容为自身理解,看到可以略过。本人喜欢想些乱七八糟的东西。


类继承:子类继承父类的状态和行为,同时也可以具有自己的特征。

(简单来讲,就是基因(非private)继承,同时自己经过环境变异增强得到自己独有的(自己定义的方法和变量))

 

方法覆盖也称为重写,即在子类为父类的同名方法提供一个不同的实现(必须有继承关系)。

(类似于父亲数学好,当了数学老师,儿子数学好,当了经济学家)maybe?

重写特征:

1、重写的方法必须与原方法有相同的方法名、参数列表和返回值类型。(数学好当然就是数学好了,怎么能变成肌肉大呢)

2、final类型无法重写,因为final类型为常值,一但赋值便不能改变。(不可遗传基因突变?自带的)

3、private类型无法重写,重写了也无关。(你无法继承父亲独有的特点,继承不了咋另作他用,重写了也是你模仿的)

4、父类的static可以被继承,但不能被重写。如果父类中的方法为静态,而子类重写了完全一样的方法,父类的方法就会被隐藏。(长江后浪推前浪)但父类中隐藏的static仍然可以用“类名.方法名”调用。

如果父类是static,子类不是。但是满足重写条件,此时会出现编译错误。(编不下去了,理解不了就硬背吧)

5、重写的方法的访问权限不能比原方法低,但是可以高。

6、重写抛出的异常的范围不能比原方法更多,但是可以更少。

7、发生在运行阶段。

父类代码:
package example.csdn;

public class Father {//父类
	
	public char last_name;//姓
	private String first_name;//名
	public final String vehicle;//家族汽车
	public Father() {
		last_name = '张';
		first_name = "三十";
		vehicle = "红旗";
	}
	public Father(char Lname,String Fname,String Carname) {
		last_name = Lname;
		first_name = Fname;
		vehicle = Carname;
	}
	public void called() {
		System.out.println("My name is "+first_name+last_name);
	}
	public void GoodAtMath() {
		System.out.println("I'm good at math,So i am math teacher");
	}
}
 子类代码:
package example.csdn;

public class Son extends Father{
	private String Son_first_name;
	public Son() {
		Son_first_name = "四十";
	}
	@Override
	public void called() {
		System.out.println("My name is "+Son_first_name+last_name);
	}
	public void drive() {
		//vehicle = "五菱宏光";//出错
		System.out.println("I'm going for a ride in my"+vehicle);
	}
	public static void listen(String music) {
		System.out.println("I'm bored listening to "+music);
	}

}

很明显,你爹的名字都敢用,肯定错了。

自己搞个名字,这样才可以

继承过来的明明时红旗,怎么能是五菱宏光呢。很明显,final定义的常量类型可以被继承,但是不能被修改。

 

 这里的Father f = new Son() 相当于一个子类转父类的向上转型, 即指父类 Father 引用 f 指向子类 Son 对象,这时候因为使用的是父类引用,所以方法都是以父类为主,如果子类对父类方法进行重写的话,这时候调用的会是子类的。

在这里,父类的方法被重写,所以f.called和s.called的结果都是子类重写后的方法结果。而static类型的listen方法并不能被重写,所以f.listen使用的还是父类的static方法,而s.listen 用的就是子类自己定义的 static 方法。
 
 

方法重载,即 一个类中定义多个名称相同但参数不同的方法(发生在同一个类当中)。 重载特征:

1、方法名必须相同。(否则会报错)

2、方法的参数列表必须不同。(参数的个数、类型、顺序不同,满足其中一个即可,也可以同时满足)

3、方法的返回值的类型不做要求。

4、重载发生在编译器编译阶段,编译器根据参数的不同调用相应的方法。

5、调用重载的方法时还可能发生自动类型转换。

6、可以声明新的或更广的检查异常。

这里是构造方法重载,其他方法重载与这个类似。

(方法重载,相当于用另一个号介绍自己吧,表面上是个学生,实际上是个?)

 
重写和重载的区别:

1、重写只能用于子类,而重载用于同一类中。

2、重写的方法名、参数列表、返回值类型必须相同,重载的参数列表必须不同,返回值类型任意。

3、重写对方法的访问权限和抛出异常有特殊的要求,而方法的重载没有这方面的限制。

4、父类的方法只能被同一子类重写一次,而一个方法可以被重载很多次。

5、重写是运行时的多态,重载是编译时的多态。

6、重写与重载都与参数名无关。

 

 

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号