抽象类有这么几个要求:抽象类必须被继承,抽象方法必须被重写,抽象方法不能直接实例化。
在编写抽象类代码的时候,我遇到过这样的报错: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的报错不知道要怎么处理。
希望有类似经历的朋友,无论你的困惑解决还是没解决都可以在评论中留下你的看法,期待和你交流。