您的位置:首页 > 其它

重写重载,重构,加载,覆盖的区别

2015-01-25 13:31 183 查看
楼主的问题问得很好,但是我们每一个问题都是想要一个结果的,这个问题涉及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()这个方法。

至于加载的意思,其实就是让编译器执行某段程序,可以是类可以是包可以是任何编译器能够编译的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: