多态
子类可以重写父类的方法,那么我们可以定义很多同类型的对象
同类型的对象,执行同一个行为,会表现出不同的行为特征叫多态
常见形式
父类名称 对象名 = 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类型
网友评论