Java基础语法08-面向对象-接口
枚举是一种特殊的类
-
-
本类内部创建一组常量对象,并添加public static修饰符,对外暴露这些常量对象
【修饰符】 enum 枚举类名{
常量对象列表;
其他成员列表;
}
枚举类的要求和特点:
-
枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。
-
如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。
-
编译器给枚举类默认提供的是private的无参构造,如果枚举类需要的是无参构造,就不需要声明,写常量对象列表时也不用加参数,
-
如果枚举类需要的是有参构造,需要手动定义private的有参构造,调用有参构造的方法就是在常量对象名后面加(实参列表)就可以。
-
枚举类默认继承的是java.lang.Enum类,因此不能再继承其他的类型。
-
-
枚举类型如有其它属性,建议(不是必须)这些属性也声明为final的,因为常量对象在逻辑意义上应该不可变。
1.toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
2.name():返回的是常量名(对象名) 【很少使用】
3.ordinal():返回常量的次序号,默认从0开始
4.values():返回该枚举类的所有的常量对象,返回类型是当前枚举的数组类型,是一个静态方法
5.valueOf(String name):根据枚举常量对象名称获取枚举对象
序号 | 基本数据类型 | 包装类(java.lang包) |
---|---|---|
1 | byte | Byte |
2 | short | Short |
3 | int | Integer |
4 | long | Long |
5 | float | Float |
6 | double | Double |
7 | char | Character |
8 | boolean | Boolean |
9 | void | Void |
1、装箱与拆箱
装箱:把基本数据类型–>包装类对象
手动装箱:例如:new Integer(int值) 或 Integer.valueOf(int值)
自动装箱:Integer i = int值;
拆箱:把包装类的对象–>基本数据类型
手动拆箱:例如:Integer的对象.intValue()
自动拆箱:int i = Integer的对象;
-128~127 | |
Short | -128~127 |
Integer | -128~127 |
Long | -128~127 |
Float | 没有 |
Double | 没有 |
Character | 0~127 |
Boolean | true和false |
包装类对象不可变:一旦修改就是新对象。如:方法的参数传递,不会改变原先的对象的值
【修饰符】 interface 接口名{
// 静态常量
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}
1、公共的静态的常量:public static final
2、公共的抽象的方法:public abstract
非抽象的实现类必须重写
3、公共的默认方法:public default,JDK1.8之后
使用“实现类的对象.”进行调用
实现类可以选择重写
4、公共的静态方法:public static, JDK1.8之后
只能使用”接口名.“进行调用
实现类不能重写
5、私有的方法:private(private不能省略)JDK1.9之后
【修饰符】 class 实现类 [extends 父类] implements 接口1,接口2{
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】default单词就不要再写了
}//继承在前,实现在后
实现类实现接口时,必须重写接口的所有抽象方法,否则实现类就必须是抽象类。
不能重写静态方法
-
-
也只能使用“接口名.”进行调用,不能通过实现类的对象进行调用
-
-
对于接口的抽象方法、默认方法,只能通过实现类对象才可以调用
-
接口不能直接创建对象,只能创建实现类的对象
-
方法可能有冲突问题:
(1)一个实现类实现了多个接口,而多个接口中出现了方法签名相同的默认方法时:
实现类必须做出选择:
A:保留其中一个:接口名.super.方法名
B:也可以完全重写
(2)一个实现类既继承父类,又实现接口,当父类中出现与接口的默认方法的方法签名相同的方法:
B:也可以完全重写
接口的多继承
一个接口能继承另一个或者多个接口,接口的继承也使用 extends
【修饰符】 interface 接口 extends 接口1,接口2{
}
子接口重写默认方法时,default关键字可以保留。
子类重写默认方法时,default关键字不可以保留。
接口与实现类对象的多态引用