日积月累, 滴水石穿。敲代码是极好的。。。
package com.gt.gtop.test.java8;
/**
* 内部类的学习
* @author 非宁静无以致远
*
*/
public class InnerClass {
public static void main(String[] args) {
//1、********************** 成员内部类 star*************************
InnerClass innerClass = new InnerClass();
InnerClass.Car car = innerClass.new Car(); //创建 成员内部类对象方法一
Car car2 = innerClass.getCar(); //创建 成员内部类对象方法一
car.in();
car.in("t");
car2.in();
car2.in("t");
//************************** 成员内部类 end*********************
//2、********************** 局部内部类 star*************************
InnerClass innerClass1 = new InnerClass();
innerClass1.run();
innerClass1.run2(true);
//************************** 局部内部类 end*********************
//3、********************** 嵌套内部类 star*************************
InnerClass.run3();
//************************** 嵌套内部类 end*********************
//4、********************** 匿名内部类 star*************************
InnerClass innerClass4 = new InnerClass();
innerClass4.demo();
//************************** 匿名内部类 end*********************
}
public void out(){
System.out.println("这是外部类的无参数方法");
}
public void out(String s){
System.out.println("这是外部类的有参数方法, 参数:" + s);
}
//********************** 成员内部类 star*************************
// 1. 成员内部类
// 成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。
// 同时外部类要访问内部类的所有成员 变量或方法,则需要通过内部类的对象来获取。
// (成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的)
public Car getCar(){
return new Car();
}
public class Car{
public void in(){
System.out.println("这是成员内部类的无参数方法");
out();
}
public void in(String s){
System.out.println("这是成员内部类的有参数方法, 参数:" + s);
out(s);
}
}
//********************** 成员内部类 end*************************
//2、********************** 局部内部类 star*************************
//局部内部类,是指内部类定义在方法和作用域内
//定义在方法内
public void run(){
class Person{
public void in(){
System.out.println("这是成员内部类的无参数方法");
out();
}
public void in(String s){
System.out.println("这是成员内部类的有参数方法, 参数:" + s);
out(s);
}
}
Person person = new Person();
person.in();
person.in("kk");
}
//定义在作用域内
//局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的
public void run2(boolean flag){
if(flag){
System.out.println("在作用域内!");
class Person{
public void in(){
System.out.println("这是成员内部类的无参数方法");
out();
}
public void in(String s){
System.out.println("这是成员内部类的有参数方法, 参数:" + s);
out(s);
}
}
Person person = new Person();
person.in();
person.in("PP");
}else{
System.out.println("不在作用域内!");
}
}
//************************** 局部内部类 end*********************
//3、********************** 嵌套内部类 star*************************
//嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系
public static void run3(){
class Person{
public void in(){
System.out.println("这是成员内部类的无参数方法");
}
public void in(String s){
System.out.println("这是成员内部类的有参数方法, 参数:" + s);
}
}
Person person = new Person();
person.in();
person.in("qiantao");
}
//************************** 嵌套内部类 end*********************
//4、********************** 匿名内部类 star*************************
//只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现
public void demo(){
Runnable runnable = new Runnable() {
public void run() {
System.out.println("这是匿名内部类");
}
};
runnable.run();
}
//************************** 匿名内部类 end*********************
}