类型简介
java种类型系统分为两类:
第一种是 基本类型(byte short int long float double char boolean)
第二种是引用类型(除了上述8种都为引用类型,String ,int[]…,引用类型是由基本类型组成的)
除此之外引用类型中还有一种特殊的类型叫包装类型,包装类型其实就是基本类型的封装,与基本类型是一一对应的,有Byte,Short,Integer,Long,Float,Double,Character,Boolean,包装类型对应着对象,有对象的各种特征,我们可以用创建对象的语法创建一个包装类型,例:
他有对象的各种特征。
类型转换
同类型之间可以直接赋值,传参,不同类型之间的赋值传参就需要类型转换。
类型转换的规则:
1.基本类型之间的转换规则
图中顺着箭头方向的转换属于隐式转换(自动转换),直接就可以转,例:
逆着箭头方向的转换属于强制转换,强制转换有可能损失精度,方法就是需要再转换时添加转换类型,例:
2.包装类型与基本类型之间的转换规则
基本类型能与其对应的包装类型自动转换,例:
3.引用类型之间的转换规则
首先了解一下继承的特点, **(1)单继承(子类只能有一个父类);(2)Object(他是所有其他类型直接或间接的父类型,定义class时,不屑extends此类也是继承自object)(3)**子类与父类或祖先类型之间可以用【是一个】的关系表达,比如猫是一个动物,猫是一个物体。
顺着箭头转换(也就是待转换的对象和目标类型之间,要符合【是一个】的关系),就可以隐式转换,例:
转换之后对象还是那个对象,只是用父类型代表了他。
逆着箭头方向转换其实也属于强制转换,且转换的对象和目标类型之间,要符合【是一个】的关系,这与上面顺着箭头的要求并不冲突,就是说猫不能转换成狗
4.不属于上述三种的,借助转换方法
比如Integer.parseInt()是将一个类型转换成整数型
多态
同一个方法表现出的不同行为就叫多态,比如两个对象同时调用一个方法,结果其中一个按顺时针走,另一个按直线走。
多态有很多种,这里说的是子类型多态,归根结底是因为对象不同,使得表现出的行为不一样。
行为不同的前提:(1)用父类代表子类对象(2)子类和父类得有相同的方法(也就是方法重写),这一点我们可以通过注解来检查,如下:
具体代码和运行流程:
首先执行方法执行方法时会判断执行该方法的对象是什么,完后判断该对象中是否有子类中该方法的重写,最后调用方法,有重写调用子类中的该方法,没有重写调用父类中的该方法
多态的前提:
封装
为了保证代码中的某些参数不能随便的访问和更改,我们必须保证代码有更好的封装性。
java里的四种标识符:
封装有个原则:尽可能让访问范围最小(private<默认<protected<public),字段建议设为私有,想让子类用的考虑设为protected
JavaBean(规范)
例:
注:
解决单继承短板——接口
如果我们创建一个鸟类,里面鸭子和企鹅的子类,完后我们需要调用“飞”这个方法,但之后我们在创建一个昆虫类,里面有蜻蜓这个子类,他也要调用“飞”这个方法,所以必须在昆虫类里在生成一个方法,这就很复杂了,因此我们要引入一个新的概念:接口
我们将重复调用的代码(也就是上例的“飞”),不放在父类中,放在接口中,一个类虽然只能继承一个父类,但一个类可以继承多个接口,比如鸭子既会“游泳”,也会“飞”
接口的语法
注意:
例:
如上图,鸭子类连接了游泳和飞翔两个接口,他就具备了飞翔和游泳的能力。
限制:
(1)同一个java源文件中虽然可以同时出现多个类和多个接口,但是他们中只能有一个时public
(2)(1)中所说的public类的名字必须和源文件同名
接口特性——多态
条件(其实跟继承的多态条件差不多):
注意:
利用接口能使代码有更好的封装性,因为用户只能访问到接口里的方法,对于继承接口的类并不能访问。