相关疑难解决方法(0)

为什么包可见性优先于子类可见性?

这个答案显示了Java的可见性修饰符及其含义:

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  y    |    y    |    y     |   y
————————————+———————+—————————+——————————+———————
protected   |  y    |    y    |    y     |   n
————————————+———————+—————————+——————————+———————
no modifier |  y    |    y    |    n     |   n
————————————+———————+—————————+——————————+———————
private     |  y    |    n    |    n     |   n
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么允许所有子类的可见性意味着您必须提供包中所有其他类的可见性?换句话说,为什么Java创建者会这样做,而不是:

Modifier    | Class | Subclass | Package | World
————————————+———————+—————————-+——————————+———————
public      |  y    |    y    |    y     |   y
————————————+———————+—————————+——————————+———————
no modifier |  y    |    y    | …
Run Code Online (Sandbox Code Playgroud)

java visibility

14
推荐指数
1
解决办法
216
查看次数

Java 9中的"模块本地"访问行为

由于Jigsaw项目的核心是Java模块系统,因此能够仅限制对特定模块内特定程序元素(类,方法和字段)的访问是很好的.

当模块中的某些元素对于此模块基本上是公共的时,它可能会有所帮助,但不应在此模块外部访问.

所以我说的是"package-local"之后的下一级访问,可以命名为"module-local".

然而,简要介绍Jigsaw规则和早期规范并没有帮助我弄清楚这种功能.更具体地说,Modifier规范不包含任何新元素.

那么在未来的Java 9中还有其他任何可能吗?

java access-modifiers java-platform-module-system java-9

13
推荐指数
2
解决办法
1634
查看次数

什么是封装?

我有两个封装定义,不能适合一个定义.

  1. 封装是数据隐藏.通过使用private,protectedpublic,将数据打包到单个组件中.
  2. 无论改变什么都包含它.保护任何易于改变的东西.

这两个定义如何讨论相同的概念?

java oop encapsulation

11
推荐指数
2
解决办法
6356
查看次数

Swift 3:Public和Internal访问修饰符之间的区别?

我在Swift 3中阅读了Apple关于访问修饰符的参考资料.我在stackoverflow上也读过同样的内容,但是我没有得到答案.据我所知,有四个层次:

  1. 公开,公开
  2. 内部
  3. Fileprivate
  4. 私人的

我为自己创建了方案,以了解所有这些修饰符之间的差异并在此处上传.如您所见,公共修饰符和内部修饰符之间没有区别.但是它们处于不同的级别.任何想法将不胜感激!

oop inheritance public internal swift

11
推荐指数
5
解决办法
8188
查看次数

Java - 包私有类中的方法可访问性?

如果我有一个java类,它是package-private(用"class"声明,而不是"public class"),如果里面的方法被声明为public或protected或package-private,那么确实没有区别,对吧?那么我应该使用哪种,或者何时应该使用哪种?我有点困惑.

java methods accessibility class public

10
推荐指数
1
解决办法
9312
查看次数

Java中的受保护的访问修饰符

我在理解java中的受保护访问修饰符(或其背后的设计)时遇到了一些麻烦.我认为这意味着包访问和访问通过继承包含抽象成员的类的对象.

我写了以下示例代码.我看到如果取消注释,注释掉的行会产生编译错误.为什么我可以通过Second中的Second对象访问pro,但不能通过Second中的First对象访问pro?

package first;

public class First {

    protected void pro(){
        System.out.println("Can see protected method");
    }

}
Run Code Online (Sandbox Code Playgroud)
package first;

public class InFirst {


    public static void main(String[] args){
        First fst = new First();
        fst.pro();
    }

}
Run Code Online (Sandbox Code Playgroud)
package second;

import first.First;

public class Second extends First {

    public static void main(String[] args){

        First fst = new First();

//      fst.pro();

        Second sec = new Second();
        sec.pro();

    }
}
Run Code Online (Sandbox Code Playgroud)

java protected access-modifiers

10
推荐指数
1
解决办法
2万
查看次数

私有和受保护之间的Java

我有一个类,我希望只能为其子对象访问该方法,而不是该包中的其他类.

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
protected   |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
no modifier |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
private     |  ?    |    ?    |    ?     |   ?
____________+_______+_________+__________+_______
my Modifier |  ?    |    ?    |    ?     |   ?
____________+_______+_________+__________+_______
Run Code Online (Sandbox Code Playgroud)

是否有一种解决方法来拥有这种修饰符?

也许有办法让一个包最终,所以其他程序员不能在我的包中添加任何类?

或者有没有办法获取调用该函数的实例,并检查这个是否是我的super对象的实例?

或者我只需要离开它,只使用受保护的,其他程序员可能会在我的包中添加类...

java access-modifiers

10
推荐指数
1
解决办法
189
查看次数

如何在Java中检测按键

我的儿子(11岁)正在学习Java,他将输入一个问题和一些代码.他告诉我他无法在网站上找到这个问题的答案.您将阅读我的问题的编辑版本.非常感谢.

如何在java中检测到按键,我的IDE被称为eclipse,我已经创建了一些类.我在互联网的keyconfigofplayer中找到了代码并将其更改为扩展播放器类.我想要它,所以当我按住一个矩形或椭圆形键移动屏幕时,我怎么能这样做?由于某种原因,它不会正确输入代码,这就是为什么我的导入没有星号,看起来很奇怪.对于那个很抱歉.请忽略它.我无法解决这个问题:(.这是我的代码:

窗口代码:

import javax.swing.*;
import java.awt.*;

public class window {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.setSize(600, 600);
        player p = new player();
        f.add(p);

        keyconfigofplayer key = new keyconfigofplayer();
        p.add(key);
        f.add(key);

    }
}
Run Code Online (Sandbox Code Playgroud)
//this class is the player graphic

import javax.swing.*;
import java.awt.*;

    public class player extends JPanel {

    int x = 50;
    int y = 50;

    public void paint() {//This is where the graphic …
Run Code Online (Sandbox Code Playgroud)

java eclipse swing keypress keylistener

9
推荐指数
2
解决办法
7万
查看次数

默认情况下,枚举中变量的访问级别是多少

最近我遇到了以下代码:

enum Animals {
    DOG("woof"), CAT("meow"), FISH("burble");
    String sound;

    Animals(String s) {
        sound = s;
    }
}

class TestEnum {
    static Animals a;
    public static void main(String[] args) {
        System.out.println(a.DOG.sound + " " + a.FISH.sound);//Expected compilation failure
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望代码因为这a.DOG.sound部分而无法编译.但令我惊讶的是,事实并非如此.我四处搜索,包括官方文档,以找出访问级别,但一无所获.是公开的还是默认的

java enums

8
推荐指数
2
解决办法
3953
查看次数

在类中为自己的字段使用getter/setter有什么好处吗?

通常,在我自己的项目中,我使用getter和setter进行任何字段访问,然后我按照我的工作做同样的事情.前段时间,我们项目的技术负责人问我为什么这样做,为什么这比仅仅使用字段本身更好(如果需要通过子类访问,可以选择声明它们受保护).我无法得出一个明确的答案.

那么,是否有任何理由在类的自己的字段中使用getter和setter,或者直接使用字段是否更好?

java

6
推荐指数
2
解决办法
2126
查看次数