说到java基础那么就不能不说内部类,随着JDK版本的升级现在到JDK1.8对于内部类也作出了必定的改进,那么接下来就慢慢道来。java
在个人认知下内部类分为四种:成员内部类,局部内部类,匿名内部类,静态内部类。this
成员内部类是最为常见的内部类,由于它在类的内部定义,是这个类的成员。成员内部类能够无条件的访问外部类的全部成员属性和成员方法。对象
public class People {
private int age;
private int height;
public Eye getEyeInstance(){
return new Eye();
}
private class Eye{
void look(){
System.out.println(age);
System.out.println("Hi,I'm looking at you!");
}
}继承
public People(int age, int height) {
super();
this.age = age;
this.height = height;
}接口
public static void main(String[] args) {
People peo = new People(18, 178);
People.Eye eye = peo.new Eye();
eye.look();
peo.getEyeInstance().look();
}
}作用域
须要注意的是:当内部类的变量或者方法与外部类的成员的名字相同的时候使用方式:get
外部类.this.变量(或者方法名);class
从上面的代码能够看出:当外部类想使用内部类成员的时候须要先建立一个内部类的对象而后经过对象引用基础
People peo = new People(18, 178);变量
People.Eye eye = peo.new Eye();
public Eye getEyeInstance(){ return new Eye(); }
经过这两种方式都能产生内部类对象,因为内部类是依赖于外部类的,因此须要先建立一个外部类对象。内部类能够被private,protected,public修饰。
2.局部内部类
局部内部类是定义在一个方法或者任何一个做用域中的类,对于使用它的地方是至关有限的,访问仅限于方法内或者做用域内。因为局部内部类是方法中的一个局部变量,因此不能用public,protected,private,static的修饰符,下面是使用方法:
public People getTeacher(){
class Teacher extends People{
public Teacher(int age, int height) {
super(age, height);
}
}
return new Teacher(1, 1);
}
3.匿名内部类
匿名内部类没有类名,匿名内部类只能使用一次,匿名内部类必须继承一个父类或者实现一个接口。
写法:
interface Person { public void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }