1. 程式人生 > >2017.12.13T19_B2_6.4內部類

2017.12.13T19_B2_6.4內部類

post ssd ets 內部 實例化 類的方法 body ide rgs

package com.xdf.demo;

/**
* 匿名內部類
*/
public interface Animal {

/**
* 所有動物吃飯的方法
*/
void eat();
}***************************************

package com.xdf.demo;

/**
* 外部類 必須是 public 修飾,不能更改 訪問權限修飾符
* 內部類可以設置 訪問權限修飾符
*
* 如果我們把Son單獨提取成一個類
* 這樣任何地方都可以訪問Son!
* 現在把Son變成了內部類!
* 別人必須想訪問Father,才能拿到Son
*
*/
public class Father { // 外部類
/**
* 外部類的成員變量
*/
private static int age = 50;
private String name = "小白";

/**
* 定義成員內部類
*/
class Son { // begin Son
int age = 100;
String name = "小黑";

/**
* 內部類的方法
*/
public void sayHello() {
System.out.println("Son 成員內部類 打招呼的方法!");
System.out.println("內部類age==>" + age);
System.out.println("內部類name==>" + name);
System.out.println("======獲取外部類的屬性=======");
System.out.println("外部類age==>" + Father.this.age);
System.out.println("外部類name==>" + Father.this.name);
}
} // end Son

/**
* 外部類的方法
*/
public void getSon() {
class Son { // 局部內部類 僅限於 getSon()方法
public void sayHello() {
System.out.println("Son 局部內部類 打招呼的方法!");
}
}
Son son = new Son();
son.sayHello();
}

/**
* 靜態內部類
*/
static class Son2 {
public void sayHello() {
System.out.println("Son2 靜態內部類 打招呼的方法!" + age);

**********************************************************

package com.xdf.demo;

import com.xdf.demo.Father.Son;
import com.xdf.demo.Father.Son2;

public class InnerClassDemo {

public static void main(String[] args) {
/**
* 使用成員內部類
* 01.實例化外部類對象
* 02.通過外部類對象創建內部類對象
* 03.調用內部類的屬性和方法
*/
Father father = new Father();
Son son = father.new Son();
son.sayHello();

// 訪問局部內部類
father.getSon();

// 訪問靜態內部類
Son2 son2 = new Son2();
son2.sayHello();

// 訪問匿名內部類
Demo demo = new InnerClassDemo().new Demo();
demo.animalEat("大大的");

}

class Demo { // 成員內部類

public void animalEat(final String name) {
// 實例化一個動物 匿名內部類
Animal dog = new Animal() {
@Override
public void eat() {
System.out.println(name + "小狗在啃骨頭!!");
}
};
dog.eat();

}

2017.12.13T19_B2_6.4內部類