在研究内部类的时候突然想到能否和抽象类组合使用,比如:
package arraydemo;
import arraydemo.Outer.Inner;
class Outer{
int age = 25;
protected void trace(Object word){
System.out.println(word.toString());
}
abstract class Inner{
String name = "张三";
public abstract void write(Object something);
}
}
public class AbstractDemo extends Inner{//此处报错,由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用
static Outer out = new Outer();
public static void main(String[] args) {
System.out.println(out.age);
Outer.Inner in = out.new Inner();
}
public void write(Object something){
System.out.println(something.toString());
}
}
但是现在在实例化内部类的时候出现错误,提示由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用,请问有什么办法使得主方法中可以取得内部抽象类的实例吗?
如果能够实现的话再追问一句,这么做在开发中有意义吗?抽象类 内部类
package arraydemo;
import arraydemo.Outer.Inner;
class Outer{
int age = 25;
protected void trace(Object word){
System.out.println(word.toString());
}
abstract class Inner{
String name = "张三";
public abstract void write(Object something);
}
}
public class AbstractDemo extends Inner{//此处报错,由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用
static Outer out = new Outer();
public static void main(String[] args) {
System.out.println(out.age);
Outer.Inner in = out.new Inner();
}
public void write(Object something){
System.out.println(something.toString());
}
}
但是现在在实例化内部类的时候出现错误,提示由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用,请问有什么办法使得主方法中可以取得内部抽象类的实例吗?
如果能够实现的话再追问一句,这么做在开发中有意义吗?抽象类 内部类
解决方案 »
- java代码退出前执行这mysql 的 show innodb status命令
- 帮帮忙,混口饭吃不容易呀!
- 请问,解压文件操作,一个RAR文件,我如何用程序来解压它,需要涉及到哪些关键类,谢谢~~!!
- 有谁知道J Builder 8 Enterprise 注册码!高分想赠!
- java语句里如何实现获取已知日期的年、月、日呀
- 关于jb6。0连oracle8。17所出现的问题。帮帮忙啊!!!!!!!!
- 高分求解,谁能提供使用微软的jdbc接口制作的实例,必须可以调用数据的
- 元数据(METADATA)是什么?
- java编译器还可到哪里下载?
- java Socket编程readLine()阻塞
- java中函数块应该会在执行后被销毁吧 ?
- 多态问题求助
楼主代码的编译错误是试图在静态环境下继承非静态的父类,非静态的内部类实例化必须依赖于某个外部类实例。
比如:class Middle extends Inner{//无法继承
//报错:由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用
}
楼主只要理解了这句: “试图在静态环境下继承非静态的父类”你试图定义 class Middle 的环境是 静态 的,
而 Inner 是 非静态 的。
public AbstractDemo(Outer outer){
outer.super();
}
static Outer out = new Outer();
public static void main(String[] args) {
System.out.println(out.age);
Outer.Inner in = new AbstractDemo(out);
in.write(out);
}
public void write(Object something){
System.out.println(something.toString());
}
}