猿问

java instanceof创建两个强制转换对象出现问题了

public class Ilove {

public static void main(String[] args) {

/* M1 ob1=new M1();

M1 ob2=new M2();//父类的引用是可以指向子类对象的

M1 ob3=new Cks();//爷爷类的引用是可以指向孙子类对象,但仅限于继承的属形与方法

//M2 ob3=new M1();//错误

System.out.println(ob1);

System.out.println(ob2);

System.out.println(ob3);

ob2.eat();

ob3.eat();

//ob2.ser();父类引用指向子类对象不可以调用子类私有属性

}

}*/

   M2 m2=new M2();

   M1 m1=m2;//自动类型提升 向上类型转换

  // m1.eat();//m1应用自动提升至m2引用地址

  //m1.ser();//m1引用无法调用M2私有方法与属性

   if(m1 instanceof M2  ){

    M2 m22=(M2) m1;//向下类型转换,强制类型转换//向下类型转换有溢出风险,m22引用指向m1引用无法保证m1引用是否指向其他子类形成溢出风险

   }else{

  System.out.println("无法进行类型转换,转换成M2类型");

   }

   

   Cks cks=new Cks();

   M1 m11=cks;

   

   if(m11 instanceof Cks){

  

   

   Cks dd=(Cks) m1;//1.编译时Cks类型 2.运行的是M2类型

   }else{

  System.out.println("无法进行类型转换,转换成Cks类型");

   }

   //没有经过基类自动转换,子类无法进行向下转换类型

}

}


乱也
浏览 1972回答 2
2回答

米沙之国

你可以在编译框点击代码语言选java,再把代码粘贴进去,不然看着杂乱的代码很头疼的

sunday_imooc

System.out.println(son1 instanceof father); System.out.println(son1 instanceof son); System.out.println(father1 instanceof son); System.out.println(father1 instanceof father); true true false true
随时随地看视频慕课网APP

相关分类

Java
我要回答