final关键字的用法:

   1、final关键字修饰变量(成员变量和局部变量的区别,引用变量和基本数据类型的区别)。

     2、final可以修饰方法
     3、final修饰类

其中final修饰方法跟继承有关,而且不能被子类重写;

fianl修身类是不能被继承的;而且要注意:fianl修饰基本数据类型的成员变量必须赋值,否则编译器报错。并且fianl修饰的成员变量一旦赋值就不可改变。


例如:public final class Retangle{
                     public  final  void test1{
                      }
             }
             // 注意:这里程序会报错,因为被fianl修饰的类,不允许被继承。
             public class Cube extends Retangle{
                       // 这里也会报错,fianl修饰的方法在子类中不能被重写。
                       public void test1{}
             }
abstract 关键字:
     abstract要注意一下几点:
        1.对于方法来说,加了abstract就没有意义了。
        2.有抽象方法的类一定是抽象类,抽象类不一定有抽象方法。然而方法中用了abstract,那本身就成了抽象类。
         例如:public abstract class Shape{}  // 表示抽象类。
        3.抽象类不允许被实例化。
        4.抽象类有构造方法,子类可以通过shper调用父类的构造方法,对从父类的属性进行初始化。
        5.抽象关键字不可以与fianl关键字一起使用,因为abstract要求子类一定要重写父类的方法,但fianl不允许重写。
        6.抽象关键字不恶意和private关键字一起使用,因为private是私有的,不能被继承的内容代表根本不存在方法重写,因此不能一起使用。
        7.关键字不能与static一起使用,static是静态修饰符,代表不需要实例化对象,直接类名就可以调用,如果是抽象方法,没有方法实现调用方法会出错,所以不能一起使用。
        8.构造方法不允许被继承,也没有重写,不能用abstract修饰。
注意:用abstract修饰的方法没有方法执行体,因为不行有任何内容;而且abstract修饰的方法在子类中必须重写,抽象类不能够被实例化,可子类创建对象进行调用。
         例如: abstract void teat1();// 用abstract修饰的方法没有方法执行体。


public abstract class Shape{
          int  x;
          int  y;
          public void tset2();
}
public class Cycle extends Shape{
//抽象方法。要被子类重写才有意义       // 这里重写了父类的方法
void test2() {
// TODO Auto-generated method stub
System.out.println("我是子类重写了抽象方法");
}}
 public static void main(String[] args){
       //抽象类 shape不能够被实例化
       //Shape s = new Shape();
  Cycle c = new Cycle();
    c.x = 20;    c.test2();
}