发表于: 2018-03-10 22:50:35

1 584


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程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。

类型运算符是小括号,类型转换运算的用法是(typevariable

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



返回列表 返回列表
评论

    分享到