多态的实现条件
在java中要实现,必须要满足如下几个条件,缺一不可。
- 1.必须在继承体系下
- 2.子类必须要对父类中的方法进行重写
- 3.通过父类的引用调用冲写的方法。
想要真正的学好多态需要去学习一些前置知识,那我们直接开始吧!
重写
重写:也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
【重写的规则】
- 子类在重写父类的方法时,返回值,方法名,参数列表,要保持完全一致。
- 访问权限不能比父类中被重写的方法的访问权限更低。
- 父类被static、private修饰的方法、构造方法都不能被重写。
- 重写方法可以使用,@Override 注解来显式指定,相当于多一层编译器校验。
【重写和重载的区别】
动态绑定与静态绑定
静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。
动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法
向上转型
向上转型简单来说就是把子类对象给父类。
实际就是创建一个子类对象,将其当成父类对象来使用
语法格式
这两行代码可以简化成一行代码。
Animal animal = new Dog("旺财",3); //父类引用,引用了子类对象
你看到的这个过程就是向上转型。
向上转型的优点:让代码实现更简单灵活。
向上转型的缺陷:不能调用到子类特有的方法。
向下转型
将一个对象进行向上转型之后当成父类对象使用,在无法调用子类特有的方法,此时:将父类引用在还原为子类对象即可。
语法格式:
向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。
多态
多态的概念
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。
- 多态是方法或对象具有多种形态,是面向对象的第三大特征。
- 多态的前提是两个对象(类)存在继承关系,多态是建立在封装和继承基础之上的
总的来说:同一件事情,发生在不同对象身上,就会产生不同结果。
多态的应用
说明:如果我们想画一些图形出来,有花,圆形,三角形。
class Shape{
public void draw(){
System.out.println("画图形");
}
}
class Rect extends Shape{
@Override
public void draw() {
System.out.println("♦");
}
}
class Cycle extends Shape{
@Override
public void draw() {
System.out.println("⚪");
}
}
class Flower extends Shape{
@Override
public void draw() {
System.out.println("❀");
}
}
public class Test {
public static void main(String[] args) {
Shape[]shapes = {new Rect(),new Cycle(),new Flower()};
for(Shape shape : shapes){
shape.draw();
}
}
}