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 ...
随机推荐
- Web缓存加速指南(转载)
这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中.为了简要起见,某些实现方面的细节被简化或省略了.如果你更关心细节实现则完全不必耐心看完本文,后面参考 ...
- freecodecamp 基础算法题笔记
数组与字符串的转化 字符串转化成数组 reverse方法翻转数组顺序 数组转化成字符串. function reverseString(str) { a= str.split("" ...
- css边框颜色渐变
在实际开发中,我们经常遇见边框需要背景渐变的实现要求,那么如何去实现呢,今天给大家分享依稀几种情况 1.直角的背景渐变 <!DOCTYPE html> <html lang=&quo ...
- flutter圆角效果的实现
new Material( borderRadius: BorderRadius.circular(20.0), shadowColor: Colors.blue.shade200, elevatio ...
- idea springboot应用启动
在idea里启动springboot应用最好使用 spring-boot:run 如果通过运行main方法启动应用,会找不到页面
- Oracle Sequence Cache 参数说明
转自 http://blog.csdn.net/tianlesoftware/article/details/5995051 之前整理的一篇文章: ORACLE SEQUENCE 介绍 http:// ...
- MOTT介绍(2)window安装MQTT服务器和client
MQTT目录: MQTT简单介绍 window安装MQTT服务器和client java模拟MQTT的发布,订阅 window安装MQTT服务器,我这里下载了一个apache-apollo-1.7.1 ...
- canvas交互部分
mousemove let mouse = { x: undefined, y: undefined, } // 鼠标监听事件,获取鼠标移动的相应坐标 window.addEventListener( ...
- Android组件系列----Activity组件详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- 【Redis】命令学习笔记——键(key)(20个超全字典版)
安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ...