java学习笔记 --8-- 多态

Java / 2020-03-28

多态

多态分离了做什么和怎么做,将接口和实现分离
作用:消除类型之间的耦合
多态(动态绑定,后期绑定,运行时绑定)

向上转型

对象可以作为本身使用,也可以作为他的基类使用

方法调用绑定

将一个方法的调用和方法的主体关联起来叫做方法的绑定
后期绑定(动态绑定):在运行时根据对象的类型进行绑定
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是阴式的)