Java中super的限定作用和引用变量的强制类型转换

例子,可以限定调用父类被覆盖的实例

class BaseClass
{
 public int a = 5;
}
public class SubClass extends BaseClass
{
 public int a = 7;
 public void accessOwner()
 {
  System.out.println(a);
 }
 public void accessBase()
 {
  System.out.println(super.a);
 }
 public static void main(String[] args)
 {
  SubClass a=new SubClass();
  a.accessOwner();
  a.accessBase();
 }
}



例2:

class BaseClass 

public int book = 6; 
public void base() 

System.out.println("父类的普通方法"); 

public void test() 

System.out.println("父类的被覆盖的方法"); 


public class SubClass2 extends BaseClass 

//重新定义一个book实例Field隐藏父类的book实例Field 
public String book = "轻量级Java EE企业应用实战"; 
public void test() 

System.out.println("子类的覆盖父类的方法"); 

public void sub() 

System.out.println("子类的普通方法"); 

public static void main(String[] args) 

//下面编译时类型和运行时类型完全一样,因此不存在多态 
BaseClass bc = new BaseClass(); 
//输出 6 
System.out.println(bc.book); 
//下面两次调用将执行BaseClass的方法 
bc.base(); 
bc.test(); 
//下面编译时类型和运行时类型完全一样,因此不存在多态 
SubClass2 sc = new SubClass2(); 
//输出"轻量级J2EE企业应用实战" 
System.out.println(sc.book); 
//下面调用将执行从父类继承到的base方法 
sc.base(); 
//下面调用将执行从当前类的test方法 
sc.test(); 
//下面编译时类型和运行时类型不一样,多态发生 
BaseClass ploymophicBc = new SubClass2(); 
//输出 6 —— 表明访问的是父类Field 
System.out.println(ploymophicBc.book); 
//下面调用将执行从父类继承到的base方法 
ploymophicBc.base(); 
//下面调用将执行从当前类的test方法 
ploymophicBc.test(); 
//因为ploymophicBc的编译类型是BaseClass, 
//BaseClass类没有提供sub方法,所以下面代码编译时会出现错误。 
//ploymophicBc.sub(); 


类型转换运算符的用法是:(type)variable   将variable转换成typle
如果要让引用变量调用他运行时的类型的方法,则必须把它强制转换成你给他运算时候的类型
public class ConversionTest
{
 public static void main(String[] args)
 {
  double d = 13.4;
  long l = (long)d;
  System.out.println(l);
  int in = 5;
  //下面代码编译时出错:试图把一个数值型变量转换为boolean型,
  //编译时候会提示: 不可转换的类型
  //boolean b = (boolean)in;
  Object obj = "Hello";
  //obj变量的编译类型为Object,是String类型的父类,可以强制类型转换
  //而且obj变量实际上类型是String类型,所以运行时也可通过
  String objStr = (String)obj;
  System.out.println(objStr);
  //定义一个objPri变量,编译类型为Object,实际类型为Integer
  Object objPri = new Integer(5);
  //objPri变量的编译类型为Object,是String类型的父类,
  //可以强制类型转换,而objPri变量实际上类型是Integer类型,
  //所以下面代码运行时引发ClassCastException异常
  String str = (String)objPri;
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值