Java编写抽象类、内部类代码出现的报错

抽象类有这么几个要求:抽象类必须被继承,抽象方法必须被重写,抽象方法不能直接实例化。

在编写抽象类代码的时候,我遇到过这样的报错:abstract methods do not specify a body.

检查之后发现,尽管抽象类里边的抽象方法代码已经被注释掉了,但是{}还放在那里,这个是不应该有的,也是这次引起报错的原因。

继承类中重写抽象方法时可以有方法体。


内部类是Java中很重要的概念,static静态内部类用来访问静态方法和变量,member成员内部类用来访问封装类中的成员,local局部内部类是方法体或更小的语句块中的类,anonymous匿名内部类不定义对象。

在把一个类写成接口的时候,我遇到过这样的报错:No enclosing instance of type ShapeTest is accessible.Must qualify the allocation with an enclosing instance of type ShapeTest.(e.g. x.new A() where x is an instance of ShapeTest.)

看别人的博客有这样的解释:因为内部类是动态的(无static关键字修饰),而main方法是静态的,普通的内部类对象隐含地保存了一个引用,指向创建它的外部类对象,所以要在static方法(类加载时已经初始化)调用内部类的必须先创建外部类。

还举了一个这样的例子方便理解:DynamicTest test = new staticCallDynamic().new DynamicTest(),staticCallDynamic是外部类,DynamicTest是内部动态类。如果将内部类修改为静态类,也可以在main中直接创建内部类实例。

按照这样的思路,我将报错代码改为: Shape circle1 = new Circle().new Shape(); Shape是用interface定义的接口。但是仍然会有不存在class Shape的报错不知道要怎么处理。

希望有类似经历的朋友,无论你的困惑解决还是没解决都可以在评论中留下你的看法,期待和你交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值