Gor*_*don 23 java abstract-class inner-classes
可以与方法本地内部类一起使用的合法修饰符之一是abstract.
例如:
public class Outer {
public void method(){
abstract class Inner{
}
}
}
Run Code Online (Sandbox Code Playgroud)
你有实际使用它的情况吗?
你必须知道SCJP考试.
Kaj*_*Kaj 12
这是原始问题中的一些无效假设.某些东西是合法/有效的Java并不意味着它是您需要使用或需要知道的东西.
我不记得SCJP包含奇怪的案例问题.
我试图提出一个案例,我将使用在方法中声明的抽象类,但是一切看起来很奇怪,并且设计糟糕.这是一个我想出的代码示例(仍然是糟糕的代码设计恕我直言)
public class BatchExecutor {
public static enum ResultNotification {
JMS,
MAIL
};
public Runnable createRunnable(ResultNotification type) {
abstract class Prototype implements Runnable {
public void run() {
performBusinessLogic();
publishResult();
}
abstract void publishResult();
}
switch (type) {
case JMS: {
return new Prototype() {
void publishResult() {
//Post result to JMS
}
};
}
case MAIL: {
return new Prototype() {
void publishResult() {
//Post result to MAIL
}
};
}
}
return null;
}
private void performBusinessLogic() {
//Some business logic
}
}
Run Code Online (Sandbox Code Playgroud)
我只能在这种情况下思考
class Outer {
public void method() {
abstract class A {
void bar(){}
abstract void foo();
}
class B extends A {
@Override
void foo() {
}
}
final class C extends A {
@Override
void foo() {
}
}
A a1 = new B();
A a2 = new C();
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法想象真正的用法
你有实际使用它的情况吗?
设S 1表示您需要抽象类的所有情况.
设S 2表示您需要本地课程的所有情况.
在回答你的问题可以通过检查s内发现1 ∩小号2
相关问题:
澄清:我的观点是这两个特征(抽象类和本地类)是该语言的两个完全正交的特征.了解每个功能何时有用是了解它们何时同时有用的关键.
恕我直言,这个功能没有实际用途.有一些可能的滥用,但还有许多其他方法来编写错误的代码,你不需要学习这个.:d
每当您尝试使用抽象方法本地类时,您都需要定义至少两个具体的方法 - 内部类.这意味着你最终得到一个包含至少三个类的方法,该方法变得非常长,而且这种方式非常糟糕.
你必须知道SCJP考试.
我真的希望不是.方法本地内部类已经无用到被认为是一个极端情况(你应该理解它们但可能永远不会使用它们).
恕我直言,一个在考试中问这个问题的人误解了Java.在本地类上不能有可访问性修饰符,因为(缺少方法文字)无论如何都无法从外部访问类.可以有abstract和final改性剂,因为没有理由去禁止他们.有充分理由允许它们:正交性和最小惊讶原则.