java继承之五(instanceof(类型转换)、引用类型)

instanceof作用:判断两个类之间是否存在父子类关系。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Object obj=new Stror();
           Proae pr=new Stror();
        //使用instanceof判断的前提是,两边的类型有关系的前提下才可以,如果两边完全没有父子类关系的话编译是不会通过的
            System.out.println(obj instanceof Stror);//通过instanceof方法去判断obj是否Srtor类型的
            System.out.println(pr instanceof Stror);
            //注意使用instanceof对比想要编译能通过,他们一定得要有父子类关系,如果没有关系那编译就会报错
    }
}

//子类
class Stror extends Proae{
    
}

//父类
class Proae{
    
}

类型转换:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //类型之间的转化:基本类型转换注意高低就行,如果从高转到低就需要进行强转了
        //类型之间的转: 父>子
        //例子1:父 转  子
        //高          低
        Proae st=new Stror();
        //当前的对象是父类指向子类的引用,那我们现在想调用Stror类中的方法是调用不了的
        //    st.go();//无法调用子类中的方法
    //    ((Stror)st).go();如果不想像下面一样先把对象拆分来转换为stror类型,就想调用子类方法,可以像这样直接写成一句代码即可
        //如果想要调用Stror中的方法,那我们可以让Stror将Proae这个对象转换为stror类型,我们就可以使用stror类型的方法了,如下
        //目前st对象的类型是proae的类型,因为proae是stror的父类,所以想把st转换成stror类型的话我们就得要强制转换
        Stror pr=(Stror)st;////pr.go();
        
         //例子2:子 转  父
         Stror stu=new Stror();
         stu.go();//可以直接调用子类方法
         Proae pe=Stror;//直接可以转换为子类的类型,不需要强制转换
         pe.go();//无法调用 ,因为子类转换为父类,可能丢失自己的本来的一些方法
    }
}
//子类
class Stror extends Proae{
    public void go(){
        System.out.println("go");
    }
}

//父类
class Proae{
      public void run(){
        System.out.println("run");
    }
}

多态总结:

  1.父类引用指向子类的对象

  2.把子类转换为父类:向上转型,不用强制转换

  3.把父类转换为子类:向下转换:需要强制转换,可能会丢失一下方法(基本类型强制转换会丢失精度)

  4.为了方便方法调用:不用重新创建一个类,直接把方法升级或降级一下,就可以直接调用对应类的方法了,这样可以减少我们的代码,让代码变得理简洁。


 

 

      

posted @ 2022-04-02 11:56  hollg  阅读(220)  评论(0)    收藏  举报