面向对象的三种基本特征:数据抽象(封装)、继承、多态
重载:
定义:在同一个类中,具有相同的方法名,但每个重载的方法具有一个独一无二的参数类型列表(可以是不同的类型,可以是不同的参数个数,也可以是相同的类型不同的顺序),但不能通过返回值去区分重载方法。
void f(){}
int f(){return 1}
f(); //无法判断调用哪个f(),所以无法通过返回值去区分重载方法
覆盖:
条件:继承基类。
定义:覆盖是指导出类去重写基类相同的方法,去扩展基类同名方法,得到自己想要的特定方法内容。若导出类有相同名称的重载方法,可以通过添加标签@override
去声明这是一个覆盖而不是重载。
多态:
条件:
1、继承基类。
2、重写。
3、父类引用指向子类对象。
定义:
1、多态是允许你将父对象设置成为一个或更多的他的子对象相等的技术(可以理解为这是一种 向上转型)
2、多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要它们都是从同一基类导出而来。
——向上转型
3、同一消息发送可以根据对象的不同从而采取不同的行为方式。
作用:多态的作用是消除类型之间的耦合关系
内容:
1、Java中所有方法(除了static和final)都是通过动态绑定实现多态
2、多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术
3、private方法被自动认为是final方法,对导出类是屏蔽的,不能被覆盖、重载。
4、域在编译器进行解析
5、构造器不具有多态性(实际上它们是static方法,声明是隐式的)
好处:
1、改善代码的组织结构和可读性
2、创建可扩展的程序
class Instrument{
public void play(){System.out.println("This is play()");
}
}
class Wind extends Instrument{
public void play(){System.out.println("This is play() of Wind");
}
}
public class Test{
public static void main(String[]args){
Instrument i=new Wind(); //Upcasting
i.play();
}
}
Output:This is play() of Wind