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
之前我们学习数据类型的时候,有个强制数据类型转换,格式:数据类型(想转换的数据类型) 变量名字 =(转换的数据类型) 需要转换的变量。
String a=;
int b=(int) a;
在类中,子类的和超类也有数据的类型转换,子类转换成超类,我们叫做向上转换这种转换是自动完成。超类转换子类,我们叫做向下转换,需要强制转换。语法和强制转换数据类型是一样的。
数据类型(想转换的数据类型) 变量名字 =(转换的数据类型) 需要转换的变量。
注意事项:
1、转换条件是:类和类之间是继承关系。
2:子类=父类 是成立,无需检查,因为特殊的子类也是超类的类型。
3:子类类型 变量=(子类类型)父类对象 这种转换需要做检查,父类是否是子类的引用,如果不是会发生class expection错误。前提父类对象必须是子类的对象引用
package com.company;
public class init_java {
public static void main(String[] args){
Employee man=new Manager("tom",20000,22,"evil",3000);
Manager man1=(Manager) man;
double mon=man1.giveMon();
System.out.println(mon);
}
}
class Manager extends Employee{
private double mon;
public Manager(String aname,double asalary,int age,String alaname,double mon){
super(aname,asalary,age,alaname);
this.mon=mon;
}
public double giveMon(){
double salary=super.getSalary();
salary+=this.mon;
return salary;
}
}
class Employee{
private int age=;
private String name="tom";
private double salary=;
private String alaname="evil";
public Employee(String aname,double asalary,int age,String alaname){
this.age=age;
this.name=aname;
this.salary=asalary;
this.alaname=alaname;
}
public Employee(String aname){
this.alaname=aname;
}
public String getName(){
System.out.println(this.name);
return this.name;
}
public double getSalary(){
return this.salary;
};
public String getAlaname(){
return this.alaname;
}
}
输出结果:

如下形式不可以:
public class init_java {
public static void main(String[] args){
Employee man=new Employee("tom",,,"evil");
Manager man1=(Manager) man;
double mon=man1.giveMon();
System.out.println(mon);
}
}
第一次初始化对象man,不是子类manager的对象。所以在man转换成子类的时候,会报错:

我们可以用instanceof来判断,进行转换。
public class init_java {
public static void main(String[] args){
Employee man=new Employee("tom",,,"evil");
if(man instanceof Manager) {
Manager man1=(Manager) man;
double mon=man1.giveMon();
System.out.println(mon);
}
System.out.println("change fail!");
}
java final使用的更多相关文章
- 深入java final关键字
Java final关键字详解:https://blog.csdn.net/kuangay/article/details/81509164 深入java final关键字 用法注意点和JVM对其进行 ...
- 【笔试题】Java final keyword
Java 知识测试 Java final keyword Question 1 What is the use of final keyword in Java? A. When a class is ...
- Java final修饰符
final的定义: 在英文层面上,final的意思是"最后的","最终的"意思,在Java中也同样表示出此种含义. final的运用对象: final适用于修饰 ...
- Java final 修饰符知识点总结
final从字面上理解含义为“最后的,最终的”.在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. fin ...
- Java final方法
之所以要使用final方法,可能是出于对两方面理由的考虑.第一个是为方法"上锁",防止任何继承类改变它的本来含义.设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖 ...
- Java final自变量
Java 1.1 允许我们将自变量设成final 属性,方法是在自变量列表中对它们进行适当的声明.这意味着在一个方法的内部,我们不能改变自变量句柄指向的东西.如下所示: /** * Created b ...
- Java final数据
许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: 1)编译期常数,它永远不会改变: 2)在运行期间初始化的一个值,我们不希望它发生变化.ss ...
- java final方法的作用
1. 不想让别人修改方法实现. 2. 在方法调用时使用内嵌调用. 3. 有效的“关闭”动态绑定,这样编译器就可以为final方法调用生成更有效的代码. Java编程思想: “然而,大多数情况下,这样做 ...
- Java final static abstract关键字介绍
一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须 ...
- Java final修饰形参
转自:http://java.chinaitlab.com/base/836044.html public class BB{ public int i; } public class PP{ pub ...
随机推荐
- CSS中vertical-align的默认值baseline的理解
写在前面的话 在学校业余学习了一个月的CSS,人生中第一篇博客就献给CSS了,欢迎大家指正文章中不正确的地方,在此感谢.在尝试开始写博客的时候查了好多资料,原本以为写自己熟悉的知识的博客很容易,没想到 ...
- Django REST Framework应用
一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角 ...
- druapl7:"Notice: A non well formed numeric value encountered 在 _hierarchical_select_hierarchy_generate() "
这个是很诡异的一个Notice错误提醒,因为我在Drupal7.54+PHP7.0.1的环境下,并没有报这个错.但是我再Drupal7.59+PHP7.1.7的环境下就报错了.很奇怪,按照报错信息bi ...
- 关于jsp页面中时间显示问题
首先说明一下情况,在MySQL数据库中获取的时间显示在jsp页面中不是按指定格式显示,显示的是类似于这种--Tue Jun 18 00:00:00 CST 2013.而想要的仅仅是年月日而已. 对于这 ...
- okhttp3带cookie请求
Request经常都要携带Cookie,上面说过request创建时可以通过header设置参数,Cookie也是参数之一.就像下面这样: Request request = new Request. ...
- 三、vue如何配置路由 、获取路由的参数、部分刷新页面、缓存页面
1.路由配置:所有的启动文件都在最初始的main.js文件里面,这个文件中首先需要引入: 2.路由文件配置说明: 3.如何获取页面url的参数? this.$route.query 4.页面之 ...
- [C/C++]如何解读返回函数指针的函数声明
今天在看<深入理解C++11>的时候,看到一段有意思的代码: int (*(*pf())())() { return nullptr; } 我立刻就懵了——从来没有见过这样的函数声明.那么 ...
- 【Kettle】2、文件夹与界面介绍
1.文件夹介绍 下载Kettle6.1解压后出现下图相关文件夹以及文件夹介绍说明: Lib:存放Kettle的核心(core)jar包.工作引擎(engine)jar包.数据库(DB) jar包.图形 ...
- JavaScript大位数相加减
function arrayAdd(number, addNumber) { var numberArr = number.toString().split(''); var addNumberArr ...
- unbind() 移除事件内处理方法
实例: 移除所有 p 元素的事件处理器: $("button").click(function(){ $("p").unbind(); }); 定义和用法: u ...