统计
  • 建站日期:2021-03-10
  • 文章总数:417 篇
  • 评论总数:0 条
  • 分类总数:21 个
  • 最后更新:4月20日
文章 代码笔记

继承和向上转型和向下转型

梦幻书涯
首页 代码笔记 正文


继承和向上转型和向下转型
-梦幻书涯 - 莫問前路遙遠- 與君風雪
-第1
张图片

public class Person {
    String country = "Person country is undefined.";
    String language = "Person language is unkown.";
    void printCountry() {
        System.out.println("Person类printCountry()中的country为:"+country);
    }

    void printLanguage() {
        System.out.println("Person类printLanguage()中的language为:"+language);
    }
}
class Chinese extends Person {
    int country = 1;
//    String language = "中国话";
    @Override
    void printCountry() {
        System.out.println("printCountry() 子类使用super关键字访问父类中的printCountry方法变量");
        super.printCountry();//用super关键字访问Person的printCountry方法

        System.out.println("printCountry() Chinese类中的country为:"+country);
    }

    void print() {
        System.out.println("print() 使用super关键字访问父类中的country变量为:"+super.country);//用super关键字访问Person的country成员变量
    }
}
 public static void main(String[] args) {
        Chinese lisi = new Chinese();//子类对象
        lisi.printCountry();//子类覆盖|重写父类的办法
        lisi.print();//子类独有的办法
        lisi.printLanguage();//子类没有覆盖父类的printLanguage(),那么这样调用就是直接调用子类继承父类的办法
#       父类的值是country is undefined  由于子类也有一个变量跟父类同名(int country = 1)
#       那么对象是子类值就是子类的,对象是父类,这个变量的值也是父类的值
#       如果子类没有跟父类同名的变量,那么值就是父类的,虽然对象是子类,但是继承关系,
#       它不但继承了办法还继承了变量
        System.out.println(lisi.country);//输出结果1
        System.out.println(lisi.language);//子类没有覆盖父类的language变量,那么输出的还是父类的language的值
        System.out.println("*****************");
        System.out.println("");

        Person person = lisi;//这里是向上转型,person是上转型对象,向上转型都会成功,即是安全的
#       由于这里的对象是父类,子类私有的对象对于父类是不可见的  不能用
        person.print();//报错
        person.printCountry();//向上转型对象访问重写的方法量
        person.printLanguage();//向上转型对象访问继承的方法
        System.out.println("person.country="+person.country);//向上转型对象访问隐藏的成员变量
        System.out.println("person.language="+person.language);//向上转型对象访问继承的成员变量
        System.out.println("*****************");
        System.out.println("");

        lisi = (Chinese) person;//这里是向下转型,此处是安全的
        lisi.printCountry();
        lisi.printLanguage();
#       虽然一开始是父类对象 ,但是可以转型成子类对象,子类对象当然可以调用自己的办法
        lisi.print();//正确
        System.out.println(lisi.country);
        System.out.println(lisi.language);

#       父类对象向下转型成子类对象  编译时报错java.lang.ClassCastException
        Person person = new Person();//子类对象
        Chinese  lisi = (Chinese) person;//这里是向下转型,运行不报错,编译出错
        lisi.print();//有问题的编译时
#       因此想向下转型 必须是子类创建  向上转型成父类,再有这个父类(通过向上转型来的)再向下转型成子类
#       这样就不出错了
    }

向下转型的意义

非常有意义
https://blog.csdn.net/helpluozhao123/article/details/117765890

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2022-7-1,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
mysql面试题的解说
« 上一篇
面向对象——五大基本原则
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。

最新评论

热门文章