zoukankan      html  css  js  c++  java
  • Java基础进阶_3

    多态:

    格式:

    父类名称 对象名称 = new 子类构造器;

    接口名称 对象名称 = new 实现类构造器;

    概念:同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征。

    多态识别技巧:

    对于方法的调用:编译看左边,运行看右边。

    对于变量的调用:编译看左边,运行也看左边。

    (左边是父类,右边是子类)

    使用前提:

    1.必须存在继承和实现关系

    2.必须存在父类类型的变量引用子类类型的对象

    3.需要存在方法重写

    多态的优势:

    1.右边可以实现组件化切换,业务功能也随之切换,便于维护和扩展,可实现类与类之间的解耦

    2.实际开发过程中,父类类型作为方法形式参数,传递子类对象给方法,可以传递一切子类对象进行方法的调用,更能体现出多态的扩展性和便利

    劣势:

    当子类想调用自己独有的方法时,编译看左边,说明父类中必须要有此方法,不然编译阶段就报错。

    如何解决劣势:

    使用引用类型的强制类型转换。大范围转小范围需要强制转换。由父类类型转为子类类型需要强转。

    有继承/实现关系的两个类型就可以实现类型转换,编译阶段一定不会报错,但运行阶段可能报ClassCastException

    建议在转换之前先判断变量的真实类型,语法:变量 instanceof 类型

    前者是后者的类型或者其子类类型才会返回true

     内部类:

    静态内部类:

    用static修饰的内部类,在外部类里面。内部类和外部类成员一样的。可以在内部类访问外部类的静态成员,但不能直接访问实例成员,需要用外部类的对象来访问。

    Outter.Inner in = new Outter.Inner(); //属于外部类本身。

    成员内部类:

    与普通类一样,无static修饰,但是不能在成员内部类里定义静态成员,但可以定义常量。

    Outter.Inner in = new Outter.new Inner(); //属于外部类对象的,需要先创建外部类对象才能创建内部类对象。可以在成员内部类访问外部类的静态成员,也能直接访问实例成员,因为成员内部类是属于外部类对象的。

    局部内部类:

    可在类里面的方法、构造器、代码块、for循环里定义类,只能定义实例成员,不能定义静态成员,可以定义常量。

    匿名内部类:

    无名字的内部类,为了简化代码。

    格式:

    new 类名|抽象类|接口(形参){

      方法重写。

    };

    特点:1.无名字的内部类

    2.匿名内部类一旦写出来,就会立即创建一个匿名内部类的对象返回

    权限修饰符:

    Object类:

    equals()方法比较两个对象的地址,不相同返回false,但比较地址通常使用 == ,通常比较两个对象的内容需要按照自己要求重写此方法。

    a.equals(b)和Objects.equals(a,b):后者可以防止a对象为空的情况,前者如果a对象为null会报空指针异常,后者更严谨。jdk1.7开始有Objects类。

  • 相关阅读:
    hdu 5646 DZY Loves Partition
    bzoj 1001 狼抓兔子 平面图最小割
    poj 1815 Friendship 最小割 拆点 输出字典序
    spoj 1693 Coconuts 最小割 二者取其一式
    hdu 5643 King's Game 约瑟夫环变形
    约瑟夫环问题
    hdu 5642 King's Order
    CodeForces 631C Report
    1039: C语言程序设计教程(第三版)课后习题9.4
    1043: C语言程序设计教程(第三版)课后习题10.1
  • 原文地址:https://www.cnblogs.com/superyucong/p/12637815.html
Copyright © 2011-2022 走看看