多态
多态分离了做什么和怎么做,将接口和实现分离
作用:消除类型之间的耦合
多态(动态绑定,后期绑定,运行时绑定)
向上转型
对象可以作为本身使用,也可以作为他的基类使用
方法调用绑定
将一个方法的调用和方法的主体关联起来叫做方法的绑定
后期绑定(动态绑定):在运行时根据对象的类型进行绑定
java中除了static和final(private)其他的方法都是动态绑定
产生正确的行为
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Shape shape = new Circle();
shape.draw();
}
}
class Shape{
void draw(){
};
void erase(){};
}
class Circle extends Shape{
@Override
void draw() {
super.draw();
}
@Override
void erase() {
super.erase();
}
}
class Square extends Shape{
@Override
void draw() {
super.draw();
}
@Override
void erase() {
super.erase();
}
}
因为Shape是Circle的基类,所以可以说Circle就是Shape,那么把Shape的引用指向Circle对象就是没问题的
shape.draw():看似是调用了shape的draw方法,但是由于java的后期绑定,实际上是circle调用了draw方法,(在运行时动态的把方法绑定给需要的对象)
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
Shape circle = new Circle();
System.out.println(circle.draw());
}
}
class Shape{
String draw(){
return "";
};
String erase(){
return "";
};
}
class Circle extends Shape{
@Override
String draw() {
return "this is a Circle";
}
}
class Square extends Shape{
@Override
String draw() {
return "this is a Square";
}
}
this is a circle
构造器
构造器不具有多态性(构造器其实是static方法,只不过static是阴式的)