您的位置:首页 > 编程语言 > Java开发

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

2014-12-03 23:48 375 查看
例子,可以限定调用父类被覆盖的实例

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: