A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海川 初级黑马   /  2012-9-16 16:35  /  2302 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张海川 于 2012-9-16 21:54 编辑

不要说的复杂化,越清晰越好

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

6 个回复

倒序浏览
重构:为了提高运行效率,经常要进行程序模块化,相同的模块可以反复使用
重写:方法的重写一定在不同的两个类里面,而且必须写在派生类里面
重载:方法的重载有基于不同数量的参数方法的重载,还有基于不同类型的参数方法的重载,方法的重载是在同一个类里面。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
重构
是在编写代码后在不更改代码的外部行为的前提下通过更改代码的内部结构来改进代码的过程。
重写(override)
含义:要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。
局限:
override 方法提供从基类继承的成员的新实现。 由 override 声明重写的方法称为重写基方法。 重写的基方法必须与 override 方法具有相同的签名。
不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。
override 声明不能更改 virtual 方法的可访问性。 override 方法和 virtual 方法必须具有相同的访问级别修饰符。
您不能使用 new、static 或 virtual 修饰符来修改 override 方法。
重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。

重载是指方法名称相同, 只是参数个数或类型不同. 方法功能是相同的.


除了重载, 还要了解以下几个关键字的用法,与区别:  

virtual 定义为虚方法
override 对虚方法实现,具有多态性
new 把基类中的同名方法替换掉, 不具有多态性

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
重写,顾名思义就是去掉原来方法中的内容,然后写上新的方法。方法名不变,变得是方法的具体内容

重载,就是把原来的方法中的变量信息(类型,变量数等等)改了,来实现功能。实验:你可以使用VS,调用一个C#封装好的方法,查看其重载,C#封装的大部分方法都有重载。例如Console.WriteLine()。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
区别很好看出来,
重构:就是去修改代码,比如一个方法 不修改它的参数和返回 只修改它的内部运算。
重写:看看有没有override   是实现多态性
重载:就是看看有没有和这个方法名称一样的方法。(单不是完全一样,完全一样的方法会出错)

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
重载:
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);
}
}

覆盖:

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

重构:
是针对代码,写得不好自然要重新来写,这就是重新构造代码.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
重构:就是代码优化,或则你可以理解为代码的修改!

           例:开始你的类名是A现在要改为B也称为重构的一种

重载:发生在同一类中,方法名相同,参数列表不同

重写:发生在父子类中,子类中有一个方法名,参数列表和返回值类型与父类相同的方法完全相同时, 称之为方法重写

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马