• java final使用


    一:final

    1:有时候 我们需要一些类,不要被继承。即阻止定义子类。不允许扩展的类叫做final类,如果一个类在定义的时候,用final定义的时候,表示这个类是final类。无法定义子类。

    语法 形式:

    final  class  classname{

    statement.....

    }

    2:如果方法被final修饰的话,表示该方法无法被子类方法覆盖,默认情况下,final类中的方法都是final方法。但是实例域却不是自动转换为final。需要注意。

    语法形式:

    class  classname{

    public final  void  get_Name(){

    ..........

    }

    }:

    3:如果实例域被final修饰的话表示该域不能更改。对于基础数据类型修饰表示常量。

    二、强制类型转换:http://www.cnblogs.com/lubocsu/p/5101022.html

    之前我们学习数据类型的时候,有个强制数据类型转换,格式:数据类型(想转换的数据类型) 变量名字 =(转换的数据类型) 需要转换的变量。

    1 String  a=2;
    2 int   b=(int) a;

     在类中,子类的和超类也有数据的类型转换,子类转换成超类,我们叫做向上转换这种转换是自动完成。超类转换子类,我们叫做向下转换,需要强制转换。语法和强制转换数据类型是一样的。

    数据类型(想转换的数据类型) 变量名字 =(转换的数据类型) 需要转换的变量。

    注意事项:

    1、转换条件是:类和类之间是继承关系。

    2:子类=父类 是成立,无需检查,因为特殊的子类也是超类的类型。

    3:子类类型  变量=(子类类型)父类对象 这种转换需要做检查,父类是否是子类的引用,如果不是会发生class expection错误。前提父类对象必须是子类的对象引用

     1 package com.company;
     2 
     3 public class init_java {
     4     public static  void  main(String[] args){
     5         Employee man=new Manager("tom",20000,22,"evil",3000);
     6         Manager man1=(Manager) man;
     7         double mon=man1.giveMon();
     8         System.out.println(mon);
     9     }
    10 
    11 
    12 }
    13 
    14 class Manager extends Employee{
    15     private double mon;
    16     public Manager(String aname,double asalary,int age,String alaname,double mon){
    17         super(aname,asalary,age,alaname);
    18         this.mon=mon;
    19     }
    20     public double giveMon(){
    21         double salary=super.getSalary();
    22         salary+=this.mon;
    23         return salary;
    24     }
    25 }
    26 
    27 class Employee{
    28     private int  age=22;
    29     private String name="tom";
    30     private  double salary=20000;
    31     private String alaname="evil";
    32     public Employee(String aname,double asalary,int age,String alaname){
    33         this.age=age;
    34         this.name=aname;
    35         this.salary=asalary;
    36         this.alaname=alaname;
    37     }
    38     public Employee(String aname){
    39         this.alaname=aname;
    40     }
    41     public String getName(){
    42         System.out.println(this.name);
    43         return this.name;
    44     }
    45     public double getSalary(){
    46         return this.salary;
    47     };
    48     public String getAlaname(){
    49         return this.alaname;
    50     }
    51 
    52 }

    输出结果:

    如下形式不可以:

     1 public class init_java {
     2     public static  void  main(String[] args){
     3         Employee man=new Employee("tom",20000,22,"evil");
     4         Manager man1=(Manager) man;
     5         double mon=man1.giveMon();
     6         System.out.println(mon);
     7     }
     8 
     9 
    10 }

    第一次初始化对象man,不是子类manager的对象。所以在man转换成子类的时候,会报错:

     我们可以用instanceof来判断,进行转换。

     1 public class init_java {
     2     public static  void  main(String[] args){
     3         Employee man=new Employee("tom",20000,22,"evil");
     4         if(man instanceof Manager) {
     5             Manager man1=(Manager) man;
     6             double mon=man1.giveMon();
     7             System.out.println(mon);
     8         }
     9         System.out.println("change fail!");
    10 
    11     }
  • 相关阅读:
    递归算法
    抽象类(abstract class)和接口(interface)
    静态变量和实例变量
    java 工厂化生产
    win10安装使用ffmpeg+python中使用ffmpy
    C++ Concurrency in Action 读书笔记三:并发操作的同步
    C++ Concurrency in Action 读书笔记二:用mutex互斥锁保护在线程间共享的数据
    C++ Concurrency in Action 读书笔记一:thread的管理
    C++正则表达式 <regex>
    CMake使用Boost
  • 原文地址:https://www.cnblogs.com/evilliu/p/7675762.html
Copyright © 2020-2023  润新知