我的第一个问题是 -
class Explain() {
public Explain() {
}
}
Run Code Online (Sandbox Code Playgroud)
构造函数是否应始终声明为公共?
如果我创建一个private构造函数怎么办?
我总是看到构造函数是隐含的public.那么为什么private构造函数有用呢?或者根本没用.因为没有人可以调用它,或者从不创建对象(因为private构造函数)!这是我的第二个问题.
我有两个包
uk.co.planetbeyond.data
Run Code Online (Sandbox Code Playgroud)
和
uk.co.planetbeyond.data.bean
Run Code Online (Sandbox Code Playgroud)
如何使uk.co.planetbeyond.data.bean类在父包中的类中可见,uk.co.planetbeyond.data但在其他包中不可见?
它甚至可能吗?
我知道我们不能在Java中覆盖静态方法,但有人可以解释下面的代码吗?
class A {
public static void a() {
System.out.println("A.a()");
}
}
class B extends A {
public static void a() {
System.out.println("B.a()");
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能a()在课堂上覆盖方法B?
我已经看过有关protected和package private修饰符之间差异的各种文章.有一件事我发现这两个帖子之间存在矛盾
在这个被接受的答案说
protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员.
在这个被接受的答案说
要满足受保护级别访问,必须满足两个条件:
- 这些类必须在同一个包中.
- 必须有继承关系.
他们不矛盾吗?根据我对其他文章的理解,第一篇文章给出了正确的答案,即在其他包中保护== package-private + subclass.
如果此语句是正确的,那么为什么此代码失败,并在第17行的子类Cat上出现以下错误消息
The method testInstanceMethod() from the type Animal is not visible
Run Code Online (Sandbox Code Playgroud)
我的超级和子类代码如下.
package inheritance;
public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
protected void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}
package testpackage;
import inheritance.Animal;
public class Cat extends Animal{
public static void testClassMethod() {
System.out.println("The class method" + " in Cat."); …Run Code Online (Sandbox Code Playgroud) 这对于经验丰富的Java开发人员来说可能很简单,但我似乎无法弄明白.我从这里读了一篇文章.代码是
View v = new View(this) {
@Override
protected void onDraw(Canvas canvas) {
System.out.println("large view on draw called");
super.onDraw(canvas);
}
};
Run Code Online (Sandbox Code Playgroud)
这是一个Android问题.在这里,用户创建视图的实例并在一行中覆盖方法.这种编码有名字吗?
我的第二个疑问是,他从另一个包中覆盖了受保护的方法.不受保护意味着包私有.我知道这会在我尝试的时候起作用,但我无法弄清楚它为何起作用.那么为什么这段代码有效呢?
我确实尝试谷歌这个并在询问之前搜索,但无法找到答案.
我正在阅读"Java编程语言"第3版.
在第3.5章中,它protected使用以下单词说明了修饰符:
更确切地说,除了可以在类本身内访问以及在同一个包中编码之外,还可以通过对象引用从类访问受保护的成员,这些引用至少与类的类型相同,类的类型的引用或其中一个亚型.
这两个方面让我感到困惑:
1.受保护的成员可以通过同一个包中的代码访问吗?之前我所知道的是受保护的成员只能由子类访问...
2.我不明白这是什么a protected member can also be accessed from ...意思,任何人都可以向我解释好吗?
为什么我不能在包外面使用受保护的构造函数来获取这段代码:
package code;
public class Example{
protected Example(){}
...
}
Run Code Online (Sandbox Code Playgroud)
Check.java
package test;
public class Check extends Example {
void m1() {
Example ex=new Example(); //compilation error
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
编译错误:
构造函数Example()不可见
我试图学习java,当我通过访问说明符时,我有一个疑问,如果没有指定默认值和受保护的访问说明符,有什么区别?
我为这个问题的主观性而道歉,但我有点卡住了,我希望以前能够处理这个问题的人提供一些指导和建议:
我有(成为什么)一个用C#2.0编写的非常大的RESTful API项目,我的一些类变得非常可怕.我的主要API类就是一个例子 - 有几十个成员和方法(可能接近数百个).你可以想象,它变成了一个小噩梦,不仅仅是维护这段代码,甚至只是导航代码已经成为一件苦差事.
我是SOLID原则的新手,我是设计模式的忠实粉丝(但我仍处于可以实现它们的那个阶段,但还不足以知道何时使用它们 - 在不太明显的情况下) .
我需要打破我的班级规模,但我不知道如何最好地去做.我的StackOverflower伙伴能否建议他们采用现有的代码单块并将其缩小到适当大小?
这个答案显示了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 ×9
protected ×3
oop ×2
android ×1
c# ×1
constructor ×1
overriding ×1
package ×1
visibility ×1