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;
}
}
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;
}
}
相关文章推荐
- java 多态/引用变量的强制类型转换?/静态的初始化块
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- Java中的两个特殊变量this和super
- Java中的两个特殊变量this和super
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
- 第2章 Java编程基础——FAQ2.14 变量之间传值时可分为值传递和引用传递, 那么它们有何区别?
- 第1章 Java基本概念及环境配置——FAQ1.14 JDK安装时设置PATH和CLASSPATH环境变量有何作用?
- Java中的两个特殊变量this和super
- JAVA变量path , classpth ,java_home设设置作用和作用(网络搜集)
- Java: 变量的值和引用
- JAVA变量path , classpth ,java_home设设置作用和作用
- java--基本类型和引用类型变量
- 一道scjp题,关于java 变量引用的,知道为什么输出10,20吗?
- jsp 中 js变量引用java变量时 特殊字符的处理
- java初学者实践教程5-基本类型和引用类型变量
- JAVA环境变量的设置方法和设置作用
- Java中的两个特殊变量this和super- -
- Java环境变量的作用
- 在Java中有两个非常特殊的变量:this和super
- java中类的限定词的作用范围比较