final关键字

class Fu{

   publicvoid show(){

      System.out.println("这是绝密资料,任何人不能修改");

   }

}

class Zi  extends Fu{

   publicvoid show(){

      System.out.println("这是一堆垃圾");

   }

}

publicclass FinalDemo {

   publicstaticvoid main(String[] args) {

      Zi z = new Zi();

      z.show();

   }

}

继承的代码体现,由于继承中方法有一个现象:方法重写。所以,父类的功能,就会被子类给覆盖。有些时候,我们不想让子类去覆盖掉父类的功能,这时候,针对这种情况,Java就提供了一个关键字:final关键字。

class Fu{

   publicfinalvoid show(){

      System.out.println("这是绝密资料,任何人不能修改");

   }

}

class Zi extends Fu{

  

}

publicclass FinalDemo {

   publicstaticvoid main(String[] args) {

      Zi z = new Zi();

      z.show();

   }

}

 

         final关键字是最终的意思,可以修饰类,成员变量,成员方法。

         final关键字修饰类,类不能被继承。

         final关键字修饰变量,变量就变成了常量,只能被赋值一次。

         final关键字修饰方法,方法不能被重写。

 

final修饰局部变量

publicclass FinalDemo {

   publicstaticvoid main(String[] args) {

      intx = 0;

      x = 10;

      finalinty = 100 ;

      //y = 200;错误

      System.out.println(x);

      System.out.println(y);

   }

}

 

class Student{

   finalintage = 10;

  

}

publicclass FinalDemo  {

   publicstaticvoid main(String[] args) {

      //局部变量是基本数据类型

      intx = 0;

      x = 10;

      final int y = 100 ;

      //y = 200;错误

      System.out.println(x);

      System.out.println(y);

     

      //局部变量是引用数据类型

      Student stu = new Student();

      //stu.age = 20;错误

      System.out.println(stu.age);

   }

}

 

 

final修改基本类型:基本类型的值不能发生改变。

         final修饰引用类型:引用类型的地址值不能发生改变。但是,该对象的堆内存的值是可以发生改变的,除非该对象的堆内存的值也是final的。

 

final修饰变量的初始化时机

class Student{

   finalintage  ;

   {

      age = 20;

   }

  

}

publicclass FinalDemo {

   publicstaticvoid main(String[] args) {

      //局部变量是基本数据类型

      intx = 0;

      x = 10;

      finalinty = 100 ;

      //y = 200;错误

      System.out.println(x);

      System.out.println(y);

     

      //局部变量是引用数据类型

      Student stu = new Student();

      //stu.age = 20;错误

      System.out.println(stu.age);

   }

}

 

 

class Student{

   finalintage  ;

   public  Student(){

      age = 20;

   }

}

publicclass FinalDemo {

   publicstaticvoid main(String[] args) {

      //局部变量是基本数据类型

      intx = 0;

      x = 10;

      final int y = 100 ;

      //y = 200;错误

      System.out.println(x);

      System.out.println(y);

     

      //局部变量是引用数据类型

      final Student stu = new Student();

      //stu.age = 20;错误

      System.out.println(stu.age);

      //stu = new Student();报错

   }

}

 

final修饰的变量只能赋值一次。

 

多态概述

         某一个事物,在不同时刻表现出来的不同状态。

         例如:

猫可以是猫类型,猫 m =new ();

同时猫也是动物的一种,也可以把猫称为动物。动物 d = new ();

水在不同时刻有不同的状态。

多态的前提和体现:

                   有继承关系,有方法重写,有父类引用指向子类对象

         多态中的成员访问特点:

                   成员变量:编译看左边,运行看左边。

                   构造方法:创建子类对象时候,访问父类的构造方法,对父类的数据进行初始化。

                   成员方法:编译看左边,运行看右边。

                   由于成员方法存在方法重写,所以运行看右边。

         多态的好处:1.提高了程序的维护性 2.提高了程序的扩展性

         多态的弊端:不能访问子类特有功能,那么我们如何才能范文子类特有功能尼?多态的转型。把父类的引用强制转换为子类的引用。