抽象类和接口、转型、格式化输出
【摘要】抽象类和接口、向上自动转型、向下强制转型~
前言
hi~
抽象类[abstract class]
抽象类是一种抽象数据类型,它的特点如下:
A.不能被实例化。
B.天生就是要被继承的。
C.可以有构造方法、也可以有非抽象方法,也可以没有抽象方法。
所以,抽象类的定义除了多出一个abstract关键字外,与普通类一样。
如:
1 | public abstract class Animals { |
抽象方法
就是没有方法体的方法,它直接以;号结束,没有大括号。
它的意思是,对于这个方法的拥有类来说,“它”实现不了,故而做成抽象的。
A.拥有抽象方法的类必须是抽象类。
B.但是,抽象类不一定有抽象方法。
如:
1 | public abstract void spark(); |
一个子类继承了一个抽象父类后,则必须实现抽象父类的所以抽象方法。除非这个类也是抽象方法。
如:编写一个抽象父类Shape,他拥有计算面积和周长的抽象方法。
1 | public abstract class Shape { |
接口[interface]
接口它也是一种抽象数据类型,而且是完全抽象的。
它的特点:
A.所有属性都是公开静态常量
B.所有方法都是公开抽象方法
C.没有构造
D.接口支持多重继承
如:
1 | public interface 接口名 [extends 父接口1,父接口2…]{ |
注:接口编译完成后,也是.class文件。
一个类实现了某个/某些接口,则这个类要实现这些接口的所有抽象方法,除非这个类也是抽象的。
接口的命名:
1.以 I 打头。
2.以 able 结尾。
如:
1 | public interface IA{ |
特殊的两类接口
1.标记接口
既没有方法也没有属性的接口。
如:
1 | public interface IHaha{ |
一个类实现这种接口是没有任何“负担”的。
如:java.io.Serializable
2.常量接口
就是只有属性而没有方法的接口。
如:
1 | public interface Season{ |
但是,这类接口从JDK5.0后就很少用了。因为有了枚举。
如:
1 | public enum Season{ |
转型
Java是面向对象的语言,但是我们经常使用的基本数据类型却不是对象。所以实际使用中需要进行类型转换。
基本数据类型和对应的包装类型。
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
1 | Integer a = 123; //自动装箱Integer a = Integer.valueOf(123); |
格式化输出
在java中,也提供了printf方法做格式化输出。
比如:
1 | int j = 9; |
则:占位符该如何定义呢?
语法: %[index$][flag][width][.presision]conversion
conversion指的是占位符的转换字母,它有:
d 代表整数
f 代表浮点数
s 代表字符或者字符串
b 代表布尔值
t 代表时间和日期的前半部分
….
flag 标记
width 占位符宽度
.precisoin 只对浮点数有效,表示小数位
index$ 表示占位符与变量之间的对应关系,默认是一一对应的。
结束语
bye~