楼主的问题问得很好,但是我们每一个问题都是想要一个结果的,这个问题涉及java基础方面的,重载/重写(其实就是覆盖)针对的对象都是方法,所以我们具体的来说是方法重载和方法覆盖是怎么一回事,重构。。就像楼上说的那样,是针对代码,写得不好自然要重新来写,而对于初学者来说理解方法重载和方法覆盖是一个很重要的课题。
这之前需要楼主先明白什么是方法,方法其实就是函数(java中的称呼不一样而已),顾名思义就是完成一个动作或者功能的代码体(用{}包起来),一个方法必须具备返回类型/方法名/参数这三个基本元素,当然也有例外(比如构造方法是没有返回类型的)。
重载是为了让程序能够具备更好地灵活性而设计的,使用它可以节省很多时间,让代码更加简洁。
下面这个例子很好地说明了这点,楼主可以看下:
public class Circle {
private int x,y,r;
private double pi=3.1415;
public Circle(int x,int y) {
this.x=x;
this.y=y;
r=1;
this.prt();
}
public Circle(int x,int y,int r) {
this.x=x;
this.y=y;
this.r=r;
this.prt();
}
public void prt() {
System.out.println("x="+x+",y="+y+",r="+r);
}
public static void main(String[] args) {
Circle c1=new Circle(10,10);
Circle c2=new Circle(20,20,10);
}
}
Circle这个类保存一个圆,它拥有圆心坐标x y,半径长度r,如果在建立的时候不输入r,那么就默认半径r=1,方法重载要求方法名相同,返回类型相同,但是参数的类型或者个数不同,或者参数的顺序不同,在这里我们Circle构造方法的参数个数就不同,所以重载就发生了。
而覆盖是发生在不同类中的事情,通常是子类重写父类的方法,这个在接口中被普遍采用,因为实现接口以后必须重写某些方法,否则程序无法正确编译。
下面这个程序能很好的帮助你来理解覆盖:
class PrintFather {
int i=1;
public void prt() {
System.out.println("i="+i);
}
}
public class PrintOverriden extends PrintFather {
String name="PrintOverriden";
public void prt() {
System.out.println("Name="+name);
System.out.println("i="+i);
}
public static void main(String[] args) {
PrintOverriden p=new PrintOverriden();
p.prt();
}
}
父类里的prt()方法只打印int i,然后子类需要打印出String name,所以子类重写了prt()这个方法。
至于加载的意思,其实就是让编译器执行某段程序,可以是类可以是包可以是任何编译器能够编译的代码。
重写重载,重构,加载,覆盖的区别
最新推荐文章于 2022-07-28 23:27:05 发布