一。内部类中的一些简单调用与关系
public class InnerClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InnerClass ic=new InnerClass();
InnerClass.inner in=ic.new inner(); // 先创建外部对象之后 才能创建内部类 ;内部类的类型是 outClassName.InnerClassName
in.say();
}
class inner{
public InnerClass getOut(){
return InnerClass.this; // 返回外部类对象的引用
}
public void say(){
System.out.println("hello world");
}
}
}
二。方法中写内部类
public class InnerClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InnerClass in=new InnerClass();
in.getInnner("hello world!");
}
public void getInnner(final String s){ // 如果内部类中某个变量需要外部类的方法或变量的值,则外部的这个变量须为final类型
class inner{ // 改inner 类只能在该方法中调用,因此他的访问权限很低
public void say(){
System.out.println(s);
}
}
inner i=new inner(); //方法内部的类可以在类的外面new对象
i.say();
}
}
三。匿名内部类
return new parent{
private int a;
............
}
相当于 class xx extends paranet {private int a ; .......... }
return new parent;
四。静态内部类
public class InnerClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
getInner();
}
/*
* 静态内部类
*/
public static class inner{
public void say(){
System.out.println("hello world!");
}
}
/*
* 通过方法直接返回内部内
*/
public static inner getInner(){
return new inner(); // 静态内部类可以直接new的到对象,而非内部的不行
}
}
内部类的主要应用
每个内部类都能独立的继承自一个接口的实现,所以无论外围类是否已经继承了某个接口的实现 对于内部类都没有影响
多个接口时,可以使用两种方式:使用单一类,或者使用内部类
这样单一类或者内部类都能实现,如果拥有的是抽象的类或者具体的类,而不是接口,那就只能使用内部类才能实现多重继承
class A
abstract class B
class C extends A{
public B getB(){
return new B(){};
}
}
public class x{
static void makeA(A a){}
static void makeB(B b){}
public static viod main(String[] args){
C c =new C();
makeA(c;)
makeB(c.getB());
}
}