关于Java封装、继承与多态的想法

乱七八糟的想法#

封装、继承、多态是面向对象语言的重要特征。
封装最重要的就是对外部隐藏一些不必要和不许修改的成员,而公开一些对外部有用的成员。Java中使用private来实现隐藏。
继承是父类经过扩展生成一个子类,子类可能比父类具有更多的属性,java教材上说,子类将获得父类的全部成员变量和方法,而不能获得父类的构造器,那么:

  • 父类方法具有private访问权限,则方法对其子类是隐藏的,子类无法访问该方法。这时有一个问题,一个public权限的父类方法中调用了private权限的方法,而这个public权限的方法被子类继承,如果这时子类调用这个方法,那private权限的方法不是被执行了吗?
  • 父类一个成员变量具有private访问权限, 那么这个变量对于子类也是隐藏的,子类无法访问这个变量。但是,在创建子类对象时,系统会为这个成员变量创建存储空间吗?
    小实验:
class Superclass
{
    private int a = 0;
    public int b = 1;
    protected int c = 2;
    int d = 3;
    public Superclass()
    {
        System.out.println("Superclass Constructor!!");
        System.out.println(a+" "+b+" "+c+" "+d);
        call();
    }
    private void test()//一个private方法
    {
        System.out.println("Private test!");
    }
    public void call()
    {
        System.out.println("Superclass Call!!");
        this.test();
    }
}
class Subclass extends Superclass
{
    public int a = 3;
    private int b = 2;
    int c = 1;
    protected int d = 3;
    public Subclass()
    {
        System.out.println("Subclass Constructor!!");
    }
    public void call()
    {
        System.out.println("Subclass call");
        super.call();
    }
    public void test()
    {
        System.out.println("Override??");
    }
    public static void main(String[] args) 
    {
        Subclass test = new Subclass();
        test.call();
    }
}

运行结果:

Superclass Constructor!!
0 1 2 3
Subclass call
Superclass Call!!
Private test!
Subclass Constructor!!
Subclass call
Superclass Call!!
Private test!
  • 这个java程序中,在父类Superclass中定义了一个私有方法test(),子类中定义了一个公共方法test(),可以看到,这时子类并没有Override这个方法,所以在super()调用父类构造器时,执行的是父类中的私有方法,同样,在call()方法中调用test()时,执行的同样是父类中的私有方法。但这时,并不能说子类获得了这个方法,因为子类根本没有权限访问修改它。
  • 这时,如果将private方法改变为public权限,这时运行结果变为:
0 1 2 3
Subclass call
Superclass Call!!
Override??
Subclass Constructor!!
3 2 1 3
Subclass call
Superclass Call!!
Override??

此时,父类的test()方法被子类Override,这时,在执行super()和super.call()时,调用的是子类的test()方法。

  • 同时,父类的所有成员变量在子类对象被创建时,均被分配了存储空间,包括private权限的的变量,只是,这个变量不能被子类访问,只能在父类方法中被访问,因此,子类也并没有获得这个变量。

需要注意的问题#

  • 关于继承
  1. 方法Override时,子类方法的返回值类型应比父类方法返回值类型更小或相等,抛出异常应比父类方法声明抛出的异常类更小或相等,访问权限应比父类的大或相等,方法名和形参列表必须相同,覆盖方法和被覆盖方法应同为类方法或者实例方法
  2. 子类不会获得父类的构造器,但子类构造器会调用父类的构造器,不论是否显式的调用super(),这样一层层深入,每个对象在创建时,都会调用Object类的构造器。
    3.父类中的方法被子类Override时,在父类中调用该方法时,会执行子类中的覆盖方法,如上面的例子就是这种情况。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,045评论 0 2
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,066评论 0 62
  • 平衡,一方面是各项利益兼顾,在综合考虑后做决定;一方面是一碗水要端平,不要顾此失彼,横生矛盾。 做企业管理,有短期...
    自如得己阅读 226评论 0 0
  • 彩虹地毯垫 萌萌棒棒糖 实用收纳筐 详细的视频教程 by:希妈手作 手艺网,让平凡成诗
    王子小姐和玫瑰先生阅读 284评论 0 2