final意为最终的,不可变的,被
当在java中,让类和方法只能被使用,而不能被改变的时候就可以使用final关键字修饰
比如java内部提供的类,我们可以查看,但却不能去修改
例如jScanner类
final关键字只可以修饰类和变量
public final class A{ //修饰类
}
注意,修饰类的话,该类就不能被继承
修饰成员变量的时候只能在定义的时候赋值一次或者通过有参构造方法赋值一次,之后再也不能更改
局部变量也只能赋值一次,可以在定义时赋值,也可以定义之后在赋值,但同样赋值后不可更改
基本数据类型被定义后就不可以修改
引用数据类型被定义后,引用不可以修改,但引用所指的内存空间中所存的值可以更改
总结:
枚举是指列出可能发生的所有事件的集合,比如一个星期只有七天,四季只有春夏秋冬
枚举是有限的,且取值不能超过集合
下面我们来看一些实例,在JDk1.5之前我们会手动枚举数据
public class EnumDemo {
public static final int SPRING = 1;//春
public static final int SUMMER = 2;//夏
public static final int FALL = 3;//秋
public static final int WINTER = 4;//冬
public static void main(String[] args) {
showSeason(SPRING);
}
public static void showSeason(int season)) {
switch (season) {
case SPRING:
System.out.println("春季");
break;
case SUMMER:
System.out.println("夏季");
break;
case FALL:
System.out.println("秋季");
break;
case WINTER:
System.out.println("冬季");
break;
default:
System.out.println("未知数据");
}
}
用自定义关键字代替数值,实现春夏秋冬的枚举。在java1.5之后java自定义了枚举类型
认识java中的枚举
java中的枚举叫做enum,本质上是一个特殊的类,与类平级。所以枚举类型也可以拥有成员变量、方法。
语法
public enum Color {
RED,GREEN,BLUE;
}
用法
public class Test{
public static void main(String[] args) {
Color color = new Color.RED; //枚举和类平级是一个特殊的类,且枚举里的每一个枚举数据都是它自己的一个对象
System.out.println(color)
}
}
结果:
RED
枚举中也可以有成员变量,成员方法,构造方法
枚举可以实现接口
枚举不能显示继承其他父类(会默认继承java.lang.Enum类)
要描述的数据是有限的,这些数据就可以用枚举表示,枚举出来(信息分类)
接口是java中的一种抽象类型,里面是一系列方法的声明,是一些方法特征的集合
interface
public interface A {
double PI = 3.14;
double area();
}
接口的本质是一系列方法的集合
例子:
按如下要求编写Java程序:
(1)定义接口A,里面包含值为3.14的常量PI和抽象方法double area()。
(2)定义接口B,里面包含抽象方法void setColor(String c)。
(3)定义接口C,该接口继承了接口A和B,里面包含抽象方法void volume()。
(4)定义圆柱体类Cylinder实现接口C,该类中包含三个成员变量:底圆半径radius、
圆柱体的高height、颜色color。
(5)创建主类来测试类Cylinder。
三个接口类A、B、C
public interface A {
double PI = 3.14;
double area();
}
public interface B {
void setColor(String c);
}
public interface C extends A,B{ //接口可以继承接口,而且可以多继承
void volume();
}
圆柱体类
public class Cylinder implements C{
double radius; //底面圆半径
double height; //圆柱体的高
String color; //颜色
public Cylinder() {
}
public Cylinder(double radius, double height, String color) {
this.radius = radius;
this.height = height;
this.color = color;
}
@Override
public void volume() {
System.out.println("圆柱体的体积是:"+area()*height);
}
@Override
public double area() {
return PI*radius*radius;
}
@Override
public void setColor(String c) {
this.color = c;
System.out.println(color+"圆柱体");
}
public void PrintColor(){
System.out.println("我是"+color+"圆柱体");
}
}
测试类
public class Test {
public static void main(String[] args) {
Cylinder cylinder = new Cylinder(2,4,"蓝色");
cylinder.setColor("黄色");
cylinder.volume();
}
结果:
多个类,但只其中有一部分含有共同方法,则可以把这个方法抽离出来作为接口去实现,这样也不会影响到其他的类
所以,可以理解为接口在堆java的继承做一个补充,无论是继承还是多态还是接口,都是为了减少代码的冗余,和复用性