强制类型转换和多态

一、强制类型转换

    1.1、真爹变儿,不允许

    1.2、假爹变儿/儿变爹,都满足如下三条:

   1.2.1、共有方法、属性(重写):以子(重写后的)为准
   1.2.2、子特有方法、属性:不可通过father。操作
   1.2.3、父特有方法、属性:因为儿子变爹了,可以以son。操作

二、多态

    2.1 、定义格式:父类类型 变量名=new 子类类型(); 满足如下三条:

   2.1.1、共有方法、属性(重写):以子(重写后的)为准
   2.1.2、子特有方法、属性:不可通过father。操作
   2.1.3、父特有方法、属性:以father.调用

    2.2、关于多态:https://blog.csdn.net/chenssy/article/details/12786385

            关于重写和重载:https://www.runoob.com/java/java-override-overload.html

public class Test01 {
    public static void main(String[] args) {
        /**
         * 真爹 强转 子:NG
         * 真爹 不可能装 儿子
         *

        Father father = new Father();
        Son son = (Father)father;//java: 不兼容的类型: Father无法转换为Son
         */


        /**
         * 假爹 强转 子,OK
         * 1、共有方法、属性(重写):以子(重写后的)为准
         * 2、子特有方法、属性:不可通过father。操作
         * 3、父特有方法、属性:可以以son。操作
         *

        Father father = new Son();
        Son son = (Son)father;//可以
        son.f();//f
        son.s();//s
        son.age();//s-age
        son.ren();//ren

        father.f();//f
        father.s();//java: 找不到符号、 符号:   方法 s()、位置: 类型为Father的变量 father
        father.age();//s-age
        father.ren();//ren

        System.out.println(father.f);//2
        System.out.println(father.s);//java: 找不到符号、符号:   变量 s、位置: 类型为Father的变量 f
        System.out.println(son.f);//2
        System.out.println(son.s);//1
         */



        /**
         * 子 转 爹,OK
         * 1、共有方法、属性(重写):以子(重写后的)为准
         * 2、子特有方法、属性:不可通过father。操作
         * 3、父特有方法、属性:因为儿子变爹了,可以以son。操作

        Son son = new Son();
        Father father = (Father)son;//可以

        father.f();//f
        father.s();//java: 找不到符号、符号:  方法 s() 、位置类型为Father的变量 father
        father.age();//s-age//此处小心,结果是s-age而不是f-age,由儿子强转的爹也终究是儿子
        father.ren();//ren

        son.f();//f
        son.s();//s
        son.age();//s-age
        son.ren();//ren

        System.out.println(father.f);//2
        System.out.println(father.s);//java: 找不到符号、符号:   变量 s、位置: 类型为Father的变量 f
        System.out.println(son.f);//2
        System.out.println(son.s);//1
         */


        /**
         * 多态
         * 1、共有方法、属性(重写):以子(重写后的)为准
         * 2、子特有方法、属性:不可通过father。操作
         * 3、父特有方法、属性:以father.调用


        Father father = new Son();
        father.f();//f
        father.s();//java: 找不到符号、符号:  方法 s() 、位置类型为Father的变量 father
        father.age();//s-age//此处小心,结果是s-age而不是f-age,由儿子强转的爹也终究是儿子
        father.ren();//ren

        System.out.println(father.f);//2
        System.out.println(father.s);//java: 找不到符号、符号:   变量 s、位置: 类型为Father的变量 f
         */
    }
}

class Father{
    int f = 2;
    public void f(){System.out.println("f"); }
    public void age(){System.out.println("f-age");}
    public void ren(){System.out.println("ren");}
}

class Son extends Father{
    int s = 1;
    public void s(){System.out.println("s"); }
    public void age(){System.out.println("s-age");}
    public void ren(){System.out.println("ren");}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值