多态、内部类、常用API


多态

定义

同一个对象,在不同时刻表现出来的不同状态

解决的问题

  1. 提高代码的复用性
  2. 提高代码的扩张性

使用格式

父类型 对象 = new 子类();

在使用时的注意细节

  1. 多态中:父类和子类拥有一模一样的成员变量时:
    1. 编译时:以父类型中的成员变量为主
    2. 运行时:使用父类中的成员变量
  2. 多态中:父类和子类用于一模一样的成员方法时:
    1. 编译时:以父类中的成员方法为主
    2. 运行时:调用子类中重写后的成员方法
  3. 弊端:父类不能调用子类特有的方法

多态转型

  • 向上转型(自动类型转换)
    • Animal an = new Dog();
  • 向下转型(强制类型转换)
    • Dog d = (Dog) an;
    • 解决父类不能调用子类特有的方法
    • 注意细节:
      • 容易发生ClassCastException(类型转换异常)
      • 解决办法:
        • instanceof
if(父引用对象 instanceof 子类型){
  子类型 对象 = (子类型) 父引用对象;
  对象.特有成员;
}

多态代码的书写

  1. 创建对象
Father f = new Son();
  1. 作为参数
public static void method(Player p){
  p.start();
}
  1. 作为返回值
public Animal getInstance(){
  return new Dog();
}

内部类

概念

一个类A内部定义了一个类B,那么B就是A的内部类,A可以称为外部类

成员内部类

定义

类中方法外定义的类,称之为成员内部类

public class  Outer{
    class Inner{

    }
}

对象实例化

内部类的类型表示:外部类名.内部类名
成员内部类创建对象,需要借助外部类的对象:
外部类名.内部类名 变量名 = 外部类对象.new 内部类构造方法(参数);

匿名内部类

解决问题

简化程序中代码的书写

格式
new  类名/接口(){
  //重写方法
}

前提条件

有一个父类或者父接口

特点
  1. 本质就是某一个类或者接口的子类
  2. 还是一个对象
使用方式
  1. 直接调用方法使用
new Father(){
  @Override
  public void swim(){
  sout("在游泳");
  }
}.swim();
  1. 当作方法的参数传递
//方法参数类型是接口
public static void showFlyable(Flyable f){
  f.fly();
}

//调用方法
showFlyable(
  new Flyable(){
    @Override
    public void fly(){
      sout("在飞");
    }  
  }
);
  1. 当作方法的返回值
public static Flyable getFlyable(){
  return new Flyable(){
    @Overside
    public void fly(){
    sout("在飞");
    }
  };

}

API

Object类

在Java继承体系中,有一个顶层父类:Object(鼻祖类)

  • 在Java语言中,程序员自定义的类或者jdk中存在的类,直接或间接都有继承Object
  • 继承了Object类后,就可以使用Object提供的相关方法
    • String toString()
      • 作用:把对象转换为字符串
      • 快捷键:alt+insert toString
    • boolean equals(Object obj)
      • 作用:比较俩个对象是否相同,(默认比较俩个对象的地址值);和String类中的equals方法相比,可以避免空指针异常
      • 快捷键:alt+insert

Date类

归属包

java.util

作用

表示日期(精确到毫秒)

使用
  • 构造方法:
    • public Date() 表示当前计算机的时间
    • public Date(Long tine) 从1970年1月1日0时0分0秒后开始计算的时间
  • 常用方法:
    • public Long getTime() 获取毫秒值
    • public void setTime(Long time) 从1970年1月1日0时0分0秒后开始计算的时间

DateFormat类

定义

是Java语言提供的日期格式化类

作用

对日期进行格式化操作

归属包

java.text

使用

DateFormat是一个抽象类,无法实例化,使用子类:SimpleDateFormat
DateFormat df = new SimpleDateFormat(“日期模板”);

  • 构造方法
    • SimpleDateFormat(String pattern) 指定日期模板创建日期格式化对象
  • 常用方法
    • public String format(Date d) 格式化,将日期对象格式化为字符串
    • public Date parse(String s) 解析,将字符串解析为日期对象

Calendar类

介绍

日历类,内含有各种时间信息,以及获取,计算时间的方法

归属包

java.util

使用

Calendar本身就是一个抽象类,可以通过Calendar提供的静态方法getInstance获取日历子类对象

  • 常见方法
    • public static Calendar getInstance() 获取子类对象
    • public int get(int field) 获取指定日历字段的时间值
    • public void set(int field,int value) 设置指定字段的时间值
    • public void add(int field,int amount) 为某个字段增加或减少指定的值
  • get,add,set方法参数中field数据值使用Calendar中定义的整数常量来表示,如Calendar.YEAR
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Zeal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值