多态

  • 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

    多态是由方法重载,继承,方法重写,自动转型等技术的组合。

    1. 编译时多态:重载
    2. ​运行时多态(编译类型和运行类型不一致):

      ​ 1. 重写

      ​ 2. 父类或者接口指向子类对象(向上转型)

  • 前提: 继承父类或实现接口

    ​ 并重写方法。

  • 好处:提高代码扩展性,前期定义的代码可以使用后期的内容

     如果方法被子类重写会调用子类的方法(多态的最大好处)
    
     (如果子类中没有覆盖该方法,那么会去父类中寻找) 
    
  • 弊端:对于子类特有中的方法访问不到。
    子类的属性,访问不到。即使与父类重名的属性,也是访问父类的属性(覆盖只发生在方法上)。

  • 多态时成员的访问特点:

    成员变量:编译和运行都是看左边(编译能不能通过和实际运行的都是父类或者接口里边的)
    成员方法:编译是左边的,运行是右边的
    静态方法:编译和运行都是看左边。

               静态是属于类的,直接用类名调用
    
package cn.test;


public class Animal {

    public void eat(){
        System.out.println("动物吃饭");
    }
    public void sleep(){
        System.out.println("动物睡觉");
    }

}
class Dog extends Animal{
    public void eat(){
        System.out.println("狗吃骨头");
    }

    public void like(){
        System.out.println("狗抓老鼠");
    }
}
class Cat extends Animal{

    public void eat(){
        System.out.println("猫吃鱼");
    }

    public void like(){
        System.out.println("喜欢抓老鼠");
    }


}

class Duotai{
    public static void main(String[] args) {
        //父类型指向子类对象
        Animal am = new Cat();
        method(am);//同一操作作用于不同的对象,有不同的结果。
        // Animal am1 = new Dog();
        //method(am1);
    }
    /**
     * 这实际上就是设计模式中的简单工厂模式!
     *
     * 类型的参数.,传入参数的时候,可以传入任何一个类的对象,只要是对应的类的对象名称就可以了
     * 这就是多态的应用!
     * */
    public static void method(Animal animal){
        animal.eat();
    }
}
  • 向下转型

    向下转型注意事项

    • 在向下转型之前,它得先向上转型。(不然编译能通过,运行无法通过)
    • 向下转型只能转型为本类对象,子类引用不能指向父类对象。

    转型:自始至终,都是子类对象在做着类型的变化

public static void main(String[] args) {

        //父类型指向子类对象,向上转型,猫提升为动物类型
        Animal am = new Cat();
        //am.like();特有方法无法访问。 
        //向下转型 ,为了使用子类特有的方法
        Cat cat =(Cat)am;
        cat.like();    
    }

  • instanceof
boolean result = cat instanceof Animal

其中 cat为一个对象,Animal 表示一个类或者一个接口

当 cat为 Animal 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。


转载请注明: Hexo 多态

上一篇
继承 继承
继承继承在本职上是特殊——一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的 一些属性或方法。 JAVA支持多继承吗?不支持,java中提供类与类之间提供单继承 。 为什么不支持多继承?提供多
2019-01-01
本篇
多态 多态
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。 多态是由方法重载,继承,方法重写,自动转型等技术的组合。 编译时多态:重载 ​运行时多态(编译类型和运行类型不一致): ​
2019-01-01