zoukankan      html  css  js  c++  java
  • 封装继承多态

    妈呀,原来感觉自己挺垃圾的,一着手写点东西才发现,以前高估了自己,噗~~~~~抽一口老烟冷静一下.
    package com.cityhero.Test;
    
    //    封装:把类中的数据私有化,提供公共的get/set方法,统一管理
    //    继承:子类和父类之间是is a的时候,用继承,子类可以使用父类已存在的特性,根据需要,也可以扩展新的功能.
    //    多态:父类引用指向子类对象,造成父类引用的多种形态.①对象类型始终不变②在编译时,调用父类可继承的方法,运行时,
    //    子类的方法优先被执行,如果没有覆盖,则执行从父类继承到的方法.
    //    覆盖:子类把从父类继承到的方法进行重新实现  语法要求:
    //    ①方法名,返回值类型,参数列表必须相同 ②访问修饰符可同或者更宽③子类不能比父类抛出更多的异常
    
    
    //嗯~ 那么我们假定,不,就看做吧
    //new 一个Super对象jvm会给它分1M的空间去存储这个对象的数据
    //new 一个Sub对象jvm会给它分0.5M的空间去存储这个对象的数据
    //现在开始看看这个让人好奇的鬼过程究竟是怎样嘞. 去找咱们的程序入口main方法(ps:如果jdk9没有这么一句话会不会不习惯呢~~~)
    class Super {
        public String name = "Super.name";
    }
    class Sub extends Super {
        public String age = "Sub.age";
    }
    
    public class TestClass {
        @SuppressWarnings("unused")//哈,这里是我们的main啦~~
        public static void main(String[] args) {
            Super sup = new Super();//new一个父类对象,虚拟机给我们分1M空间存储这个实例对象
            Sub sub = new Sub();//因为new 子类对象时,会隐式的调用super()方法去构造一个父类对象,sub会包含父类的初始化数据,所以,这里会给我们分1.5M空间
            Sub sub1 = (Sub)sup;//这里呢,把1M转换成1.5,而1M没有sub的0.5M数据,jvm自然不允许啦,就会报类型转换异常
            Super sup1 = sub;//sup1指向那1.5M的数据区,但是呢,父类的规范里面只有1M的数据,自然我们就只能用1M的数据,而用不了子类特有的0.5啦~~
            Sub sub2 = (Sub)sup1;//虽然我们的sub2是有Super对象sup1转换来的,但是sup1实际指向的是1.5M,现在我们的sub2指向的也是这1.5M,都是Sub类,这1.5M都能正常用了~~
        }
    }
    //ps:这个形象的比喻是从其他地方看到的,但是最后一点,原文说的sub2是由Super转换而来只能用1M,其实都能用啦~
  • 相关阅读:
    人生路上对你影响最大的三位老师
    介绍自己
    xml转化为json
    html前端如何将一个页面表单内的数据全部传递到另一个页面?
    laravel 框架发送邮件
    php开发app接口
    一个非常棒的jQuery 评分插件--好东西要分享
    SVN常见问题汇总
    Wamp环境域名重定向问题
    数组
  • 原文地址:https://www.cnblogs.com/loginloading/p/6837724.html
Copyright © 2011-2022 走看看