一: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 }