Java方法覆盖与方法重载

本文介绍了Java中的类继承、方法覆盖(重写)和方法重载的概念。类继承允许子类继承父类的属性和行为,同时可以有自己的特性。方法覆盖必须保持方法名、参数列表和返回类型的一致性,并遵循访问权限和异常范围的规则。方法重载则是在同一类中创建多个同名但参数不同的方法。总结了重写和重载的区别,并通过代码示例加以说明。
摘要由CSDN通过智能技术生成

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);
	}

}

afe9795c8a394590816ff41eaa035dc1.png

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

abbf54d0f1564cc8b6b2a536dfef6af3.png

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

52be5abd9d834f7e8e06e0094cc837a8.png

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

46f11a40ba3f49b0bf449ea9cc0fbc98.png

 

 这里的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、可以声明新的或更广的检查异常。

f55e5d194d994586ba2f43c014558c2c.png

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

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

 
重写和重载的区别:

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

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

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

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

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

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

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhangDaMeng被抢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值