重载,继承,重写和多态的区别:
2016-04-13 16:19
585 查看
源地址:http://www.cnblogs.com/yhason/archive/2012/06/07/2540743.html
重载,继承,重写和多态的区别:
继承是子类获得父类的成员,重写是继承后重新实现父类的方法。
重载是在一个类里一系列参数不同名字相同的方法。
多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。
网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
下面的例子包含了这四种实现:
class Triangle extends Shape {
public int getSides() { //重写
return 3;
}
}
class Rectangle extends Shape {
public int getSides(int i) { //重载
return i;
}
}
public class Shape {
public boolean isSharp(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){
return 3 ;
}
public int getSides(Rectangle rec){
return 4 ;
}
public static void main(String[] args) {
Triangle tri = new Triangle(); //继承
System.out.println("Triangle is a type of sharp? " + tri.isSharp());
Shape shape = new Triangle(); //多态
System.out.println("My shape has " + shape.getSides() + " sides.");
}
}
注意Triangle类的方法是重写,而Rectangle类的方法是重载。
比较就可以发现多态对重载的优点:如果用重载,
则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,
则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,
在子类里各自实现(重写)。
重载,继承,重写和多态的区别:
继承是子类获得父类的成员,重写是继承后重新实现父类的方法。
重载是在一个类里一系列参数不同名字相同的方法。
多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。
网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
下面的例子包含了这四种实现:
class Triangle extends Shape {
public int getSides() { //重写
return 3;
}
}
class Rectangle extends Shape {
public int getSides(int i) { //重载
return i;
}
}
public class Shape {
public boolean isSharp(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){
return 3 ;
}
public int getSides(Rectangle rec){
return 4 ;
}
public static void main(String[] args) {
Triangle tri = new Triangle(); //继承
System.out.println("Triangle is a type of sharp? " + tri.isSharp());
Shape shape = new Triangle(); //多态
System.out.println("My shape has " + shape.getSides() + " sides.");
}
}
注意Triangle类的方法是重写,而Rectangle类的方法是重载。
比较就可以发现多态对重载的优点:如果用重载,
则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,
则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,
在子类里各自实现(重写)。
相关文章推荐
- 《Android源码设计模式》读书笔记 (22) 第22章 享元模式
- picasso-强大的Android图片下载缓存库
- Mac OS X 架设基于 SSH 的 Git 服务
- dumpbin(vs自带)
- XML学习
- Android 创建Library Project(库项目)与引用操作
- java原始类型
- 二分查找
- linux用户态和内核态理解
- iOS中的AlterViewController的一些总结
- cocos2d 安卓编译 cpp Android.mk
- ACM算法分类
- LeetCode Algorithms #102 <Binary Tree Level Order Traversal>
- linux 常用命令
- 最新最全的html5标签集合
- android.content.res.Resources$NotFoundException: String resource ID #0x1
- css小记(3)
- 自旋锁Spin lock与互斥锁Mutex的区别
- html网页使用单引号双引号 转义符
- 遍历窗体控件,设置FontName