为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在java子类中可以更容易访问字段或方法的级别访问

为什么在java子类中可以更容易访问字段或方法的级别访问

明月笑刀无情 2021-10-28 15:41:05
因此,据我所知,替换原则不允许子类具有访问权限较弱的字段,否则它可能会违反信息隐藏,并且子类应始终提供至少与其父类相同的行为。这对我来说很有意义。但同时我不明白扩展字段或方法访问级别有什么意义?我在父类中有一个私有字段,而在子类中有一个公共字段。你能给我举个例子来说明为什么这是有道理的吗?还是仅仅因为设计选择?
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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


父母和孩子有 2 个独立的测试实例。正如你在这个例子中看到的。


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


查看完整回答
反对 回复 2021-10-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

它可能会违反信息隐藏


信息隐藏虽然是一种很好的做法,但与 Liskov 替换原则几乎没有关系。


(A) 子类应始终提供至少与其父类(类)相同的行为。


这是真的,但通过禁止对继承成员使用更严格的访问修饰符来实现。一个较弱的访问修饰符表面附加行为。


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


查看完整回答
反对 回复 2021-10-28
  • 3 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信