采访者问:我们可以实例化一个抽象类吗?我说,不,他告诉我 - 错,我们可以.
我对此有点争论.然后他告诉我自己在家里试试.
abstract class my {
public void mymethod() {
System.out.print("Abstract");
}
}
class poly {
public static void main(String a[]) {
my m = new my() {};
m.mymethod();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我正在创建我的类的实例并调用抽象类的方法.有人可以向我解释一下吗?在我的采访中我真的错了吗?
花括号做什么?
handler1 = new Handler() {
public void handleMessage() {
}
};
Run Code Online (Sandbox Code Playgroud)
object = new Class_Name() {};?这种语法只存在于Android或Java上吗?它在Java中被称为什么?谢谢你的帮助.
请考虑以下代码:
public static void main(String[] args) {
File file = new File("C:\\someFile.txt") {
public void doStuff() {
// Do some stuff
}
};
file.doStuff(); // "Cannot resolve method"
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试调用新定义的方法时doStuff(),这是不可能的.原因是它file被声明为类型的对象File而不是我们新的匿名子类的实例.
所以,我的问题是,有没有"好的"方法来实现这种行为?除了显而易见的(只是,正确地宣布类).
在下面显示的代码片段中,内部类继承外部类本身.
package test;
class TestInnerClass {
private String value;
public TestInnerClass(String value) {
this.value = value;
}
private String getValue() {
return value;
}
public void callShowValue() {
new InnerClass("Another value").showValue();
}
private final class InnerClass extends TestInnerClass {
public InnerClass(String value) {
super(value);
}
public void showValue() {
System.out.println(getValue());
System.out.println(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
public final class Test {
public static void main(String[] args) {
new TestInnerClass("Initial value").callShowValue();
}
}
Run Code Online (Sandbox Code Playgroud)
main()方法内的唯一语句(最后一个片段)将值分配给类Initial value的私有字段value,TestInnerClass然后调用该callShowValue() …
我读到Class和Abstract Class之间的主要区别是,抽象类无法实例化,
但我可以为抽象类创建对象
public abstract class Earth {
abstract void sand();
void land() {
}
}
Run Code Online (Sandbox Code Playgroud)
并使用新的关键词我创建了对象,用于抽象
Earth mEarth = new Earth() {
@Override
void sand() {
}
};
Run Code Online (Sandbox Code Playgroud)
我有一些问题在Inet上没有正确答案,
1)是新关键字用于实例类?
2)实例只是对象吗?
3)mEarth被称为对象(地球的实例)?
现在我可以调用任何方法(作为回调或值返回) mEarth.sand(); mEarth.land(); 使用地球物体
我正在看这个例子,并想知道第一行是做什么的:
private SiteStreamsListener listener = new SiteStreamsListener() {
Run Code Online (Sandbox Code Playgroud)
看起来您可以以这种方式声明其他方法或覆盖方法.例如,我可以做以下事情吗?
ArrayList myList = new ArrayList() {
@Override String toString()
{
<my code here>
}
<insert new methods here>
}
Run Code Online (Sandbox Code Playgroud) java ×6
class ×2
object ×2
oop ×2
abstract ×1
android ×1
curly-braces ×1
inheritance ×1
syntax ×1