說到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(); } }