第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么在java子類中可以更容易訪問(wèn)字段或方法的級(jí)別訪問(wèn)

為什么在java子類中可以更容易訪問(wèn)字段或方法的級(jí)別訪問(wèn)

明月笑刀無(wú)情 2021-10-28 15:41:05
因此,據(jù)我所知,替換原則不允許子類具有訪問(wèn)權(quán)限較弱的字段,否則它可能會(huì)違反信息隱藏,并且子類應(yīng)始終提供至少與其父類相同的行為。這對(duì)我來(lái)說(shuō)很有意義。但同時(shí)我不明白擴(kuò)展字段或方法訪問(wèn)級(jí)別有什么意義?我在父類中有一個(gè)私有字段,而在子類中有一個(gè)公共字段。你能給我舉個(gè)例子來(lái)說(shuō)明為什么這是有道理的嗎?還是僅僅因?yàn)樵O(shè)計(jì)選擇?
查看完整描述

3 回答

?
倚天杖

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html


父母和孩子有 2 個(gè)獨(dú)立的測(cè)試實(shí)例。正如你在這個(gè)例子中看到的。


public class Main {


    public class Parent{

        private String test = "parent test";


        String getTest() {

            return test;

        }

    }


    public class Child extends Parent {

        public String test = "child test";  // defining it here hides the parent field


        @Override

        String getTest() {

            return test;

        }

    }


    public static void main(String[] args) {

        Main main = new Main();

        Parent parent = main.new Parent();

        System.out.println(parent.getTest());


        Child child = main.new Child();

        System.out.println(child.getTest());

    }

}

輸出:


parent test

child test


查看完整回答
反對(duì) 回復(fù) 2021-10-28
?
狐的傳說(shuō)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊

它可能會(huì)違反信息隱藏


信息隱藏雖然是一種很好的做法,但與 Liskov 替換原則幾乎沒(méi)有關(guān)系。


(A) 子類應(yīng)始終提供至少與其父類(類)相同的行為。


這是真的,但通過(guò)禁止對(duì)繼承成員使用更嚴(yán)格的訪問(wèn)修飾符來(lái)實(shí)現(xiàn)。一個(gè)較弱的訪問(wèn)修飾符表面附加行為。


class A {

    private int lastInput;

    protected int getLastInput() {

        return lastInput;

    }

    public int getSquareValue(int input) {

        lastInput = input;

        return getLastInput()*getLastInput();

    }

}


class B extends A {

    public int getLastInput() {

        return super.getLastInput();

    }

}


A aa = new A();

B bb = new B();

A ab = bb;


// All behaviors of A exist in B as well.

// B can be substituted for A.

System.out.println(aa.getSquareValue(5)); // 25

System.out.println(ab.getSquareValue(5)); // 25


// B also has new behaviors that A did not surface.

// This does not prevent B from substituting for A.

System.out.println(bb.getLastInput()); // 5


查看完整回答
反對(duì) 回復(fù) 2021-10-28
  • 3 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)