美文网首页
JavaSE进阶(多态,内部类,常用API)

JavaSE进阶(多态,内部类,常用API)

作者: 扶光_ | 来源:发表于2023-08-07 14:42 被阅读0次

    多态

    子类可以重写父类的方法,那么我们可以定义很多同类型的对象
    同类型的对象,执行同一个行为,会表现出不同的行为特征叫多态


    常见形式

    父类名称 对象名 = new 子类构造器
    接口 对象名 = new 实现类构造器
    
    • 方法调用 编译看左边,运行看右边
    • 变量调用 编译看左,运行也看左
      多态的前提:有继承,父类引用子类对象,有方法重写

    多态的优势

    在多态形势下,右边对象可以实现解耦合,便于扩展和维护
    Animal a = new Cat(); //直接改对象就行
    a.run();//后续业务行为随对象而变,后续代码无需更改

    缺点:
    多态下不能使用子类独有功能

    如何解决
    可以使用强制类型转换 从父到子
    子类 对象变量 = (子类) 父类类型变量

    内部类

    内部类就是定义在一个类里面的类,里面的类是寄生,外面的类是宿主

    public class People{
        public class Heart{
          }
        }
    

    使用场景及作用

    • 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整结构又只为外部事物提供服务,那么内部就可以使用内部类
    • 内部类可以方便访问外部类的成员,包括私有成员
    • 内部类提供了更好的封装性,内部类本事就可以用protected,private修饰

    静态内部类

    有static修饰 ,属于外部类对象

    成员内部类

    无static修饰,属于外部类对象

    创建对象格式 外部类.内部类 对象名 = new 外部构造器().new内部构造器();

    匿名内部类

    本质上是一个没有名字的局部内部类,定义在方法中,代码块中
    作用:方便创建子类对象,最终简化代码简写
    格式

    new 类|抽象类|接口名(){
    方法重写
      }
    

    api

    toString()

    返回堆内存中的地址(默认可以省略toString)
    实际开发中,输出地址是没有意义的
    存在的意义 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息

    equals()

    默认是比较两个对象的地址是否相同 ==也可以替代equals

    • 父类equals存在的意义是为了被子类重写,以便子类自己定制规则

    StringBuilder

    是一个可变的字符串类,对象容器
    提高字符串的操作效率,如拼接,修改
    拼接之后要恢复成String类型

    StringBuilder sb = new StringBuilder ();
    sb.append('a');
    sb.append('42');
    sout(a);//a42
    
    String rs = sb.toString();
    

    Math

    基本数字运算方法,没有提供公开构造器

    • 向上取整
      Math.ceil(4.0001); //5.0
    • 向下取整
      Math.floor(4.99999) //4.0
    • 四舍五入
      Math.round(4.65)// 5

    System类

    exit(int status) 终止当前运行的java虚拟机 0就是终止

    System.currentTimmeMillis()计算机认为时间有起始值,返回1970-1-1 00.00.00到此刻的毫秒值

    BigDecimal

    用于解决浮点型精度失真的问题
    比如0.1+0.2不等于0.3

    BigDecimal a = BigDecimal.valueOf(0.1);
    BigDecimal b = BigDecimal.valueOf(0.2);
    BigDecimal c = a.add(b);
    sout(c); //0.3
    

    add 加法
    subtract减法
    multiply乘法
    divide 除法

    double rs = c。doubleVaule();、、变成double类型

    相关文章

      网友评论

          本文标题:JavaSE进阶(多态,内部类,常用API)

          本文链接:https://www.haomeiwen.com/subject/lxsspdtx.html