相信大部分学习的小朋友大朋友都有为这个知识点头疼,我也是呀,刚开始看到这个知识点,哎呀什么是重写呀,什么是重载呀,他们俩好像没什么区别呀?今天,本灯通过一篇博文,与大家细细地讨论“重写与重载”
目录
- 继承
- 重写(Override)
- 重载(Overload)
继承
在继承中,被继承的类称为父类(father class)或超类(super class),而这个“超(super)”在咱们后面重写重载有大用;继承父类的类则反过来叫做子类(son class)
哦各位同学,这里的继承并不是指啊一个类s了啊另一个类把这个类所有的方法都继承了,当然不可能,上期我们有讲到可见性,在子类中也是如此,继承是可以自己定义的,而不是当父类s了的时候,并且子类只会继承public(公用)类和protected(受保护的)类,父亲哪怕是s了也不会让孩子乱动自己的隐私(private类)哒!
讲到继承,还要注意一点:Java 语言不支持多继承,什么是多继承呢,好像有点难懂哈,是指父亲可以有多个儿子呢?还是指孩子只能有一个父亲呢?答案当然是后者,Java 语言十分的倔强,一生只允许自己的第一个爸爸,不允许后父踏进房子(线程)一步,相比之下c++语言就表现的宽容多了。
讲了这么多,来讲点有用的,接下来我们用代码来尝试实现Java类继承!
class ComputerOs{
public String printLine(){
return "Computer os can make your PC work";
}
public void display(){
System.out.println(printLine());
}
}
public class WindowsNT extends ComputerOs{ //用extends关键字继承类
public static void main(String[] args){
WindowsNT win = new WindowsNT();
win.display();
}
}
运行结果:
Computer os can make your PC work
很奇怪,明明是实例化不同的类,为什么能调用相同的类方法呢?很简单,这就是继承。
那么这时候又有同学会问了,唉红石灯如果我想继承其他的方法只有一个不继承我自己定义怎么办?问得好,接下来让我们移步到下一个重点:重写
(本知识点 完)😂🐶
重写(Override)
建于上一个小伙伴提出的问题也是阔以解决的,但是在解决之前,我们需要学习一个新的知识点——类的重写。重写是什么呢?我也不清楚😂让我们看看菜鸟教程:
重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。
也就是说子类能够根据需要实现父类的方法。
在面向对象原则里,重写意味着可以重写任何现有方法。
来看一下代码示例吧(声明:该文章所以代码均是本人亲自执笔的!)
class ComputerOs{
public String printLine(){
return "Computer OS can make your PC work";
}
public void display(){
System.out.println(printLine());
}
}
public class WindowsNT extends ComputerOs{
public String printLine(){ //重写
return "Windows is a computer OS";
}
public static void main(String[] args){
WindowsNT win = new WindowsNT();
ComputerOs os = new ComputerOs();
os.display();
win.display(); //可以看到两个对象调用的方法重名
}
}
运行结果:
Computer OS can make your PC work Windows is a computer OS
这下又很奇怪,为什么刚刚能在不同类里调用同个方法运行结果相同而在这里运行结果就不同了呢?很简单,这就是类的重写。哎这下又有同学提问了(今天同学咋这么多是不是都是来白嫖蹭课的,拒绝白嫖白嫖是不对滴!)诶红石灯如果我只想改变参数怎么办?
重载(Overload)
什么是重载?我不知道😄让我们来看一下菜鸟教程:
重载 (overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则
- 被重载的方法必须改变参数列表;
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
代码实现它来啦!!
public class Overloading {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
//以下两个参数类型顺序不同
public String test(int a,String s){
System.out.println("test3");
return "returntest3";
}
public String test(String s,int a){
System.out.println("test4");
return "returntest4";
}
public static void main(String[] args){
Overloading o = new Overloading();
System.out.println(o.test());
o.test(1);
System.out.println(o.test(1,"test3"));
System.out.println(o.test("test4",1));
}
}
运行结果:
test1
1
test2
test3
returntest3
test4
returntest4
(本知识点完)