例如,我有抽象类Shape,它获取形状的坐标:
public abstract class Shape{
private int x;
private int y;
public Shape(int x, int y){
this.x=x;
this.y=y
}
public abstract void onDraw();
}
Run Code Online (Sandbox Code Playgroud)
现在我的课程Rect扩展自Shape:
public class Rect extends Shape{
private int height;
private int width;
public Rect(int height, int width){
this.height=height;
this.width=width;
}
@Override
public void onDraw(){
//this method should get the width and height and the coordinates x and y, and will print the shape rect
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:如何Shape从内部获取抽象类的坐标x和y Rect …
编辑修复标记为重复或更清楚为什么它似乎是重复.当时我不知道那个包和默认在哪里,因此这个帖子的原因相同.
现在我正在准备我的Java考试的考试问题,我有一个问题,要求我解释访问修饰符,并询问我有关修饰符的问题.
我可以找到有关私有,受保护,公共和默认的信息,但无法在Package上找到任何内容.
有人可以给我一个答案或链接我一篇关于它的文章吗?
在Java中,有没有办法让一个访问修饰符基本上是私有的,除了这个方法可以被孩子访问?我正在开发一个程序,其中有一些方法是某个类的孩子需要的(并且希望避免重复),但我不想公开,因为我不希望这些幼稚类的对象是实例化以访问这些方法.
如果没有这样的事情,你们会建议在这个问题上实现最佳实践?
优选地,在同一包装中 - protected不满足此要求.
One.java
public class One {
private void run() {
System.out.println("one");
}
public void start() {
this.run();
}
}
Run Code Online (Sandbox Code Playgroud)
Two.java
public class Two extends One {
public void run() {
System.out.println("two");
}
}
Run Code Online (Sandbox Code Playgroud)
Main.java
public class Main {
public static void main(String[] args) {
Two t = new Two();
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:一
但是如果我在类中声明run方法public,One我会得到"两个"作为输出.
这是非常不可预测的,这是如何工作的?
我们都知道protected那里的成员继承(对于未来的程序员,而不是那个类的用户).另一方面,static绝对是用户,因为我们无法覆盖它,...或类似的东西.
那么为什么他们决定在旧的良好的编译时错误中允许这个呢?:
public class MathUtils {
protected static max(int a, int b) {
return a > b ? a : b;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你可以从你真实的实践中给我一个很好的例子,我会很感激,你是如何使用这种方法来允许访问另一个包的子类中的静态成员的?给我一个真实的例子.我不需要太多代码,只需几句解释.谢谢.
我是java的新手.有一些新的弹出窗口叫做public final void.这是做什么的?public static void和public final void之间有什么区别?我非常感谢你们!
在下面的示例中,即使它是类的私有成员,x也可以按类更改.这是什么原因?BA
import java.util.Date;
class A {
private Date x;
public A(){
super();
x = new Date();
}
public Date getDate(){
return x;
}
public void print(){
System.out.println(this.x);
}
}
class B {
public static void main(String[] args){
A a = new A();
a.print();
Date d = a.getDate();
d.setMonth(12);
System.out.println(d);
a.print();
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Initial date generated by A
Date changed by B
Date changed by B (why does it change a private member here?)
Run Code Online (Sandbox Code Playgroud) 所以我对过去的测验有疑问.只要C和D在同一个包中,以下代码就会编译
class C {
int i;
}
class D extends C {
void m() {
this.i = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这是真是假?