Java-17.1 助解例题

/*
        爷爷 --- 父亲 --- 儿子
 */

class GrandFather {
    public void song() {
        System.out.println("唱山歌");
    }
}

class Father extends GrandFather {
    public void song() {
        System.out.println("唱情歌");
    }
}

class Son extends Father {
    public void song() {
        System.out.println("唱儿歌");
    }
}

public class PolyDemo4 {
    public static void main(String[] args) {
        GrandFather gf = new Father();//向上
        gf.song();//唱情歌
        GrandFather gf1 = new Son();//向上跨阶层
        gf1.song();//唱儿歌
        Father f = (Father) gf1;//向下
        f.song();//唱儿歌
        Father f1 = new Son();//向上
        f1.song();//唱儿歌
        Son s=(Son)gf1;
        s.song();//唱儿歌
        //ClassCastException
//        Son s = (Son)((Father)gf);


        //总结一句话  从右往左能读通的就可以转换,读不通的就不可以

    }
}
package shujia.day1.day4;
/*
            继承的时候:
                子类中有和父类一样的方法的时候,叫重写,覆盖
                子类中没有和父类一样的方法的时候,方法就被继承过来,但是当子类重写了父方法
                    结果就是被重写的那个结果
 */

class A{
    public void show(){
        show2();    //1
    }

    public void show2(){
        System.out.println("这是show2方法");  //2
    }
}

class B extends A{
//    public void show(){
//        show2();
//    }

    public void show2(){
        System.out.println("这是在B里面的show2方法");//3
    }
}

class C extends B{
    public void show(){
        super.show();//4
    }

    public void show2(){
        System.out.println("这是在C里面的show2方法");//5
    }

}

public class PolyDemo5 {
    public static void main(String[] args) {
        A a = new B();
        a.show(); //
        /*向上转型,先访问子类B没有show()方法,子类继承父类A的公共方法,并重写覆盖2,此时2变成"这是在B里面的show2方法"
          向父类找show方法,到1,执行2输出这是在B里面的show2方法
                */
        B b = new C();
        b.show();
        /*向上转型,先访问子类C show()方法,子类C继承父类B的公共方法,并重写覆盖5,此时2变成"这是在C里面的show2方法"
         子类C执行show方法,先执行4 super.show();到父类B继承A的1 show()方法,执行1中  show2()打印2输出这是在C里面的show2方法
                */

    }
}

 

posted @ 2021-09-28 21:50  艺术派大星  阅读(26)  评论(0)    收藏  举报
levels of contents