多态
什么是多态
同类型的对象,执行同一个行为,会表现出不同的行为特征
###多态的常见形式
父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器。
在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
Animal a=new Dog();
a.run();//后续业务作为随时对象而变,后续代码无需修改
定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。
内部类
内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
public class People{
// 内部类
public class Heart{
}
}
内部类的使用场景、作用
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
内部类通常可以方便访问外部类的成员,包括私有的成员。
内部类提供了更好的封装性,内部类本身就可以用private protectecd等修饰,封装性可以做更多控制。
内部类的分类
静态内部类[了解]
成员内部类(非静态内部类)[了解]
局部内部类[了解]
匿名内部类 (重点)
匿名内部类:
本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等。
作用:方便创建子类对象,最终目的为了简化代码编写。
格式:
new 类|抽象类名|或者接口名() {
重写方法;
};
Employee a = new Employee(){
public void work() {
}
};
a.work();
特点总结:
匿名内部类是一个没有名字的内部类。
匿名内部类写出来就会产生一个匿名内部类的对象匿名内部类的对象。
类型相当于是当前new的那个的类型的子类类型。
API
object类的作用:
一个类要么默认继承了Object类,要么间接继承了Object类,Object类是lava中的祖宗类。
object类的方法是一切子类都可以直接使用的,所以我们要学习object类的方法。
object类的常用方法:
方法名 |
说明 |
public String toString() |
默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 |
public Boolean equals(object o) |
默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
object的toString方法的作用是什么?
默认是打印当前对象的地址。
让子类重写,以便返回子类对象的内容。
object的equals方法的作用是什么?
默认是与另一个对象比较地址是否一样
让子类重写,以便比较2个子类对象的内容是否相同
对象进行内容比较的时候建议使用什么?为什么?
建议使用objects提供的equals方法
比较的结果是一样的,但是更安全。
StringBuilder
概述
stringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。
作用:提高字符串的操作效率,如拼接、修改等、
StringBuilder 构造器
名称 |
说明 |
public StringBuilder() |
创建一个空白的可变的字符串对象,不包含任何内容 |
public StringBuilder(String str) |
创建一个指定字符串内容的可变字符串对象 |
StringBuilder 常用方法
方法名称 |
说明 |
public StringBuilder append(任意类型) |
添加数据并返回StringBuilder对象本身 |
public StringBuilder reverse() |
将对象的内容反转 |
public int length() |
返回对象内容长度 |
public String toString() |
通过toString()就可以实现把StringBuilder转换为String |
StringBuilder sb = new StringBuilder();
sb.append("a").append("sdsf");
System.out.println(sb);
Math类
包含执行基本数字运算的方法,Math类没有提供公开的构造器。
如何使用类中的成员呢?看类的成员是否都是静态,如果是,通过类名就可以直接调用
Math类的常用方法
方法名 |
说明 |
public static int abs(int a) |
获取参数绝对值 |
public static double ceil(double a) |
向上取整 |
public static double floor(double a) |
向下取整 |
public static int round(float a) |
四舍五入 |
public static int max(int a,int b) |
获取两个int值中的较大值 |
public static double pow(double a,double b) |
返回a的b次幂的值 |
public static double random() |
返回值为double的随机值,范围[e.,1.) |
System
System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
System类的常用方法
方法名 |
说明 |
public static void exit(int status) |
终止当前运行的Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() |
返回当前系统的时间毫秒值形式 |
public static voidarraycopy(数据源数组,起始索引目的地数组起始索引贝个数) |
数组拷贝 |
BigDecimal
用于解决浮点型运算精度失真的问题
使用步骤
创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
public staric BigDecimal valueOf(double val): 包装浮点数成为对象BigDecimal对象。
*BigDecimal常用API*
方法名 |
说明 |
public BigDecimal add(BigDecimal b) |
加法 |
public BigDecimal subtract(BigDecimal b) |
减法 |
public BigDecimal multiply(BigDecimal b) |
乘法 |
public BigDecimal divide(BigDecimal b) |
除法 |
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式) |
除法 |
1.BigDecimal的作用是什么?
解决浮点型运算精度失真问题。
2.BigDecimal的对象如何获取?
BigDecimal b1 = BigDecimal.valueof(0.1);