1. final:是一个修饰符,可以修饰类,方法,成员变量,局部变量
1)final 修饰的这个类就是最终的类,不能再有子类,即不能再被继承
如 System String Integer 都是 final 类
2)final 修饰方法,该方法不能被子类重写(覆盖)
class Test{
public final void show(){
System.out.println("show");
}
}
3)final 修饰成员变量(大写),变量的值不能被修改,叫作符号常量,程序中用到的固定的数据用符号常量表示 基本类型
class Circle{
// 计算圆的面积
//内存中只有一个,是static的,可以修饰为public
public static final double PI=3.1415;
public static final int PAY=1;
public static final int NOPAY=2;
private double radius;
Ccircle(){}
Ccircle(double radius){
this.radius=radius;
}
public double area(){
return PI*radius*radius;
}
}
4)(成员变量)单例中用 final 更安全:相对于final 修饰引用类型,该类型不能再指向其他对象 地址不能改变了
class Single{
private static final Single single=new Single();// 引用类型
private Single(){}
public static Single getInstance(){
single1=new Single(); //出错
return single1;
}
}
5)final 修饰局部变量,变量的值不能被修改;当希望接收到的值不能被修改时,函数的参数也可以修饰为 final ,接收到什么用什么,不能再修改
class Demo{
public static void main(Stirng[] args){
final int a=10; //a的值不能再被修改
int num=add(5,5);
}
public static int add(final int a,final int b){
a=6; b=8; // 此时编译出错,因为形参a和b被修饰为final,其值只能接收调用者传的参数,不能再做修改
return a+b;
}
}
2. 抽象类:类中含有抽象方法(没有实现的方法,没有大括号{})
在对子类提取共性行为的过程中,出现无法确定如何实现的行为,因为子类对该行为有各自的表现方式,父类不确定如何实现该方法,父类就不实现该方法,就成为抽象方法
特点:1)抽象类不能创建对象,无法实例化;
2)子类必须重写父类(父类是抽象类)中的抽象方法,否则该子类中有继承自父类的抽象方法,那么该子类也是抽象类,编译会出错 但子类要实现功能不能是抽象类;
3)抽象类一定是父类;
4)抽象类有构造方法,用于给子类使用。
其他:1. 抽象类和普通类的区别:1)抽象类不能创建对象,普通类可以;
2)抽象类含有抽象方法,普通类不含有抽象方法。
2. abstract 不能和哪些关键字同时使用?
1)static:静态方法可以通过类名调用,但抽象方法不能被调用(非法的修饰组合,abstract和static)不能使用
2)final :final 修饰的方法不能被重写,abstract 修饰的方法必须被重写
3)private:私有化的方法不能被重写
3. 抽象类一定含有抽象方法吗? 不一定,当希望一个类不能被创建对象时使用抽象类,但可以没有抽象方法