【发布时间】:2019-01-05 01:39:50
【问题描述】:
我正在运行以下java版本
openjdk版本“10.0.1”2018-04-17
OpenJDK 运行时环境(构建 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64 位服务器 VM(内部版本 10.0.1+10-Ubuntu-3ubuntu1,混合模式)
方案一
class Outer{
abstract class Inner{
void m1(){
System.out.println("Inner class m1 method");
}
}
}
class Outer2 extends Outer.Inner{
Outer2(){
new Outer().super();
}
}
class Test{
public static void main(String[] args) {
new Outer2().m1();
}
}
输入: deep (master *) JavaStuffs $ javac sample.java
deep (master *) JavaStuffs $ java Test
输出:内部类 m1 方法
方案 2
interface Outer{
abstract class Inner{
void m1(){
System.out.println("Inner class m1 method");
}
}
}
class J implements Outer{
}
class Outer2 extends J.Inner{
Outer2(){
new J().super();
}
}
class Test{
public static void main(String[] args) {
new Outer2().m1();
}
}
输入: deep (master *) JavaStuffs $ javac sample.java
输出: sample.java:1309:错误:非法限定符;内部不是内部类
新 J().super();
^
1 个错误
方案 3
interface Outer{
abstract class Inner{
void m1(){
System.out.println("Inner class m1 method");
}
}
}
class J implements Outer{
class InnerJ extends Inner{
}
}
class Outer2 extends J.Inner{
Outer2(){
new J().super();
}
}
class Test{
public static void main(String[] args) {
new J().new InnerJ().m1();
new Outer2().m1();
}
}
输入: deep (master *) JavaStuffs $ javac sample.java
输出: sample.java:1372:错误:非法限定符;内部不是内部类
新 J().super();
^
1 个错误
在Program 2和Program 3中,我希望类在实现接口时会继承内部抽象类。但事实并非如此!谁能解释一下?一个确切的理由将不胜感激!
【问题讨论】:
标签: java inheritance interface overriding abstract