package com.ilike.inner;
/**
* 内部类(成员内部类,局部内部类,匿名内部类)
*
* @ClassName InnerClass
* @Description
* @author 桑伟东
*/
public class OuterClass {
//外部类成员变量
public String name = “桑伟东1”;
/** 成员内部类
* 1.将内部类定义在外部类的成员位置 成员内部类,可以试用成员修饰符,public static .... 可以继承,也可以实现接口
* 调用规则:内部类,可以使用外部类的成员,包括私有 外部类要使用内部类的成员,必须建立内部类对象
*/
class InnerClass1 {
//内部类成员变量
public String name = "桑伟东2";
public void innerFunction() {
//内部类局部变量
String name = "桑伟东3";
// 调用的是内部内中的局部变量,打印桑伟东3
System.out.println("内部类方法innerFunction" + name);
// 调用的是内部内中的成员变量,打印桑伟东2
System.out.println("内部类方法innerFunction" + this.name);
// 调用的是外部内中的成员变量, 打印桑伟东1
System.out.println("内部类方法innerFunction" + OuterClass.this.name);
}
}
/**
* 局部内部类,将类定义在方法内部
*/
public void outerFunction1() {
class InnerClass2{
public void innerFunction2 () {
System.out.println("局部内部类方法");
}
}
InnerClass2 in2=new InnerClass2();
in2.innerFunction2();
}
}
package com.ilike.inner;
/**
* 喝酒接口,为了测试匿名内部类
*
* @ClassName Drink
* @Description
* @author 桑伟东
*/
public interface Drink {
//喝酒方法的声明
public void drinking();
}
package com.ilike.inner;
/**
* 内部类的测试类
*
* @ClassName TestInner
* @Description
* @author 桑伟东
*/
public class TestInner {
public static void main(String[] args) {
/** 成员内部类测试
* 1.成员内部类测试 调用外部类中的内部类方法innerFunction()
* 依靠外部类对象,找到内部类,通过内部类对象找到内部类方法
* 2.格式: 外部类名.内部类名 变量=new 外部类对象().new 内部类对象();
* 变量.内部类方法
*
*/
OuterClass.InnerClass1 in = new OuterClass().new InnerClass1();
in.innerFunction();
/** 局部内部类测试
* 1.局部内部类测试 调用局部内部类的方法innerFunction2()
*/
new OuterClass().outerFunction1();
/** 匿名内部类测试
* 1.定义实现类,重写方法,创建实现类对象,一步完成
* 2. 格式:new 接口或者父类(){
* 重写抽象方法
* };
*/
new Drink() {
@Override
public void drinking() {
System.out.println("喝酒对身体不好,建议少喝!!");
}
}.drinking();
}
}