java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题 没有多继承。
每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
1.内部类继承
因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候使用特殊语法。问题在于,指向外围类对象的引用必须被初始化,而在导出类中不存在可连接的默认对象。所以必须要用特殊语法来明确说清楚他们之间的关联。
[java] view plain copy
class WithInner{
class Inner{}
}
public class InheritInner extends WithInner.Inner{
InheritInner(WithInner wi){
wi.super()
}
}
2 内部类覆盖
当继承一个外围类的时候,内部类不会发生什么变化。当明确的继承一个内部类时会发生变化。
[java] view plain copy
public class Egg {
private Yolk y
protected class Yolk {
public Yolk() {
System.out.println("Egg.Yolk")
}
}
public Egg() {
System.out.println("New Egg")
y = new Yolk()
}
}
[java] view plain copy
public class BigEgg extends Egg {
public class Yolk {
public Yolk() {
System.out.println("BigEgg.yolk()")
}
}
public static void main(String[] args) {
new BigEgg()
}
}
输出:
New Egg
Egg.Yolk
1.在一个类内部还存在另一个类,则后者为内部类;2.内部类可声明成public或private,当内部类声明成public或private时,对其访问的限制与成员变量和成员方法完全相同;
3.定义格式:
标识符 class 外部类的名称{
//外部类的成员
标识符 class 内部类的名称{
//内部类的成员
}
}
示例:
class Outer{ // 定义外部类
private String info = "hello world" // 定义外部类的私有属性
class Inner{ // 定义内部类
public void print(){ // 定义内部类的方法
System.out.println(info) // 直接访问外部类的私有属性
}
}
public void fun(){ // 定义外部类的方法
new Inner().print() // 通过内部类的实例化对象调用方法
}
}
public class InnerClassDemo01{
public static void main(String args[]){
new Outer().fun() // 调用外部类的fun()方法
}
}
这位童鞋可以试着不用内部类写个程序完成以上功能,你会发现代码明显比之前的更加麻烦和复杂,所以内部类的唯一好处是方便的访问外部类中的私有属性,从而减少代码。