zoukankan      html  css  js  c++  java
  • Java_多态

    什么是多态呢?
      在Java程序中,允许不同类的对象对同一消息做出不同的响应.
      编译时多态:又叫设计时多态,通过方法重载实现
      运行时多态(Java中的多态):程序运行时,决定调用哪个方法
    实现多态的前提条件:
      必须满足继承关系;
      父类引用指向子类实例对象;
    向上转型:(隐式转型,自动转型)
      父类应用指向子类实例,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类特有的方法
      小类转型为大类
      注意:父类中的静态方法无法被子类重写,所以向上转型后,只能调用到父类原有的静态方法
      Animal one = new Cat();


    向下转型:(强制类型转换)
      子类的引用指向父类对象,此处必须进行强转,可以调用子类特有的方法.
      必须满足转型条件才能强转:instaceof运算符:返回true/false
      if(one instaceof Cat)//one 是否满足 Cat类型特征 作用:合理规避一些异常的产生;
      Cat temp = (Cat)one;
    抽象类:
      abstract 关键字:限制类的实例化 在我们Java开发中,在Java有的类是不需要实例化的,没有意义的,比如动物是一个父类,实例化一个动物类的对象时没有意义的
      abstract class 不允许直接实例化,可以通过向上转型,指向子类实例
      当某个父类只知道其子类应该包含怎样的方法,但无法准确知道这些子类是如何具体实现这些方法的时候,
      就可以把父类设置为抽象类;
    抽象方法:
      abstract void eat();抽象方法没有方法体,子类需要重写父类的抽象方法,如果不想重写,
      需要将子类设置为抽象类.
      抽象方法不能被:static final private 修饰的
      注意:包含抽象方法的类必须是抽象类
      抽象类可以没有抽象方法
    接口 interface:
      接口访问修饰符:public 默认
      接口中抽象方法可以不写abstract关键字,访问修饰符默认为public
      当一个类实现接口时,需要实现接口中得所有抽象方法,否则需要将该类设为抽象类
      接口中可以包含常量,默认为 public static final 接口名.常量名 调用,不能被重新赋值
      接口中的默认方法和静态方法:jdk 1.8 新增 当类实现接口时可以不必重写

    //默认方法
    default
    void eat();{   方法体 }
    //静态方法
    static void stop();{   方法体 } 默认方法重写:
    public void eat(){   Animal.super.eat(); }
    静态方法是无法重写的.

      一个类可以实现多个接口用(,)隔开,必须实现所有的抽象方法
    接口的继承:
      接口可以实现继承关系,可以继承多个接口,与类的单一继承不一样,可以继承多个父接口
    内部类:
      在Java当中,允许在一个类的内部,定义另一个类,这样的类叫内部类,可以提供更好的封装手段
    分类:
    成员内部类: 也称普通内部类,直接定义在类的内部
      1.在外部使用时,无法直接对内部类进行实例化,需要借由外部类信息才能实现
      2.成员内部类的访问修饰符可以任意,但在使用的时候访问范围会受到影响

      3.内部类可以直接访问外部类的成员,如果出现同名属性,优先访问内部类中定义的

      4.可以使用外部类.this.成员的方式访问外部类同名的信息
      5.外部类访问内部类信息,需要通过内部类实例,无法直接访问
      6.内部类编译后.class文件命名:外部类名$内部类.class
    静态内部类:(static修饰)
      1.静态内部类中,只能直接访问外部类静态成员,否则可以通过外部类对象实例调用外部类非静态成员
      2.静态内部类对象实例实例时,可以不依赖外部类对象
      3.可以通过外部类.内部类.静态成员的方式,访问内部类的静态成员
      4.当内部类属性与外部类属性同名时,默认直接调用内部类的成员
       如果需要访问外部类中得静态属性,则可以通过 外部类.属性 的方式;
       如果需要方位外部类中的非静态属性,则可以通过 new 外部类().属性 的方式;
    方法内部类(局部内部类):
      1. 定义在方法内部,作用范围也在方法内
      2.和方法内部成员使用规则一样,class前面不可以添加public,private,protected,static修饰
      3.类中不能包含静态成员
      4类中可以包含final,abstract修饰的成员
    匿名内部类:没有名字,隐藏
      1.匿名内部类没有类型名称,实例对象名称
      2.编译后的文件名: 外部来$数字,class
      3.无法使用public,private,protected,static,abstract等修饰
      4.无法编写构造方法,但可以添加构造代码块,定义成员属性
      5.不能出现静态成员
      6,匿名内部类可以实现接口也可以继承父类,但是不可兼得

  • 相关阅读:
    洛谷P2331 [SCOI2005]最大子矩阵 DP
    洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP
    牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心
    zstu19一月月赛 duxing201606的原味鸡树
    gym/102021/J GCPC18 模拟拼图
    gym/102021/K GCPC18 背包dp算不同数和的可能
    洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
    洛谷 P1070 道路游戏 DP
    洛谷P2577 [ZJOI2005]午餐 打饭时间作为容量DP
    动态规划:插头DP
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/9241745.html
Copyright © 2011-2022 走看看