发表于: 2018-03-10 22:50:35
1 583
java引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
编译时类型:
public class BaseClass {
public int book = 6;
public void base() {
System.out.println("父类的普通方法");
}
public void test() {
System.out.println("父类被覆盖的方法");
}
}
类型
class SubClass extends BaseClass {
public String book = "轻量级javaEE企业实战";
public void test(){
System.out.println("子类的覆盖父类的方法");
}
public void sub(){
System.out.println("子类的普通方法");
}
public static void main(String[] args){
//编译时类型和运行时类型完全一样,因此不存在多态
BaseClass bc = new BaseClass();
System.out.println(bc.book);
bc.base();
bc.test();
//下面编译时类型和运行时类型完全一样,因此不存在多态
SubClass sc = new SubClass();
System.out.println(sc.book);
sc.base();
sc.test();
//下面编译时类型和运转时类型不一样,多态发生
BaseClass ploymophicBc = new SubClass();
System.out.println(ploymophicBc.book);
ploymophicBc.base();
ploymophicBc.test();
// ploymophicBc.sub();
}
}
在编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。
类型运算符是小括号,类型转换运算的用法是(type)variable
public class ConversionTest {
public static void main(String[] args){
double d = 13.4;
long l = (long)d;
System.out.println(l);
int in = 5;
Object obj = "Hello";
String objStr = (String) obj;
System.out.println(objStr);
Object objPri = new Integer(5);
if (objPri instanceof String){
String str =(String)objPri;
}
在进行强制类型转换之前,先用instanceof运算符判断是否可以成功转换,从而避免出现ClassCastException异常,这样可以保证程序的健壮性。
public class InstanceofTest {
public static void main(String[] args){
Object hello = "Hello";
System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
System.out.println("字符串是否是String类的实例:" + (hello instanceof Object));
System.out.println("字符串是否是Math类实例:" + (hello instanceof Object));
System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
String a = "Hello";
//System.out.println("字符串是否是Math类的实例 " + (a instanceof Math));
}
}
明天的计划:包装类,to String;final;抽象类;复习接口
遇到的问题:还好,都解决了
今天的收获:理解了很多东西,包括引用变量,类型转换
java任务二开始时间:2018.01.25
预计demo时间:2018.02.12
可能有延期风险,原因是:json看不懂,控制器的逻辑看不懂,所以又回看了java语法
禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html
评论