1. 成员内部类
关于成员内部类
- 1.成员内部类可以等同看作成员变量
- 2.成员内部类不能有静态声明
- 3.成员内部类可以访问外部所有数据
package javase.jingjie.内部类;
public class 成员 {
//静态变量
private static String s1="A";
//成员变量
private String s2="B";
//静态方法
private static void m1() {
System.out.println("静态static's m1 is start");
}
//成员方法
private void m2() {
System.out.println("成员m2 is start");
}
//成员内部类
//可以用访问控制权限符去修饰,缺省,private,protected,public
class 成员内部类{
int d=45;
//静态方法
//public static void m3() {}
//成员方法
public void m4() {
//访问静态数据,成员.能省略
System.out.println(成员.s1);
m1();
//访问成员数据
System.out.println(s2);
m2();
//可省略this,前面的知识
System.out.println(this.d);
this.m5();
}
public void m5() {
System.out.println("hello");
}
}
//入口
public static void main(String[] args) {
//创建外部对象
成员 a=new 成员();
成员内部类 t=a.new 成员内部类();
t.m4();
}
}
2. 静态内部类
关于静态内部类,不存在this
- 1.静态内部类可以等同看作静态变量
- 2.内部类可以访问外部类中的私有数据
- 3.静态内部类可以直接访问外部类的静态数据,无法直接访问成员
package javase.jingjie.内部类;
public class 静态 {
//静态变量
private static String s1="A";
//成员变量
private String s2="B";
//静态方法
private static void m1() {
System.out.println("静态static's m1 is start");
}
//成员方法
private void m2() {
System.out.println("成员m2 is start");
}
//静态内部类,不存在this引用
//可以用访问控制权限符去修饰,缺省,private,protected,public
static class 静态内部类{
//静态方法
public static void m3() {
System.out.println(s1);//静态变量可以访问,省略类名.
//System.out.println(s2);//成员变量访问不了,引用.访问
静态.m1();//可以省略外部类名.
//m2();//成员方法不能访问,创建对象引用.访问
}
//成员方法
public void m4() {
System.out.println(静态.s1);
m1();
/*引用.访问
* System.out.println(s2);
* m2();
*/
}
public static void main(String[] args) {
静态.静态内部类.m3();//静态方法调用,可以省略外部类静态.
//成员方法调用
静态内部类 t=new 静态内部类();//可以省略外部类.
静态内部类 a=new 静态.静态内部类();
a.m4();
}
}
}
3. 局部内部类
- 1.局部内部类等同于局部变量
- 2.局部内部类也不能有静态声明
package javase.jingjie.内部类;
public class 局部 {
//方法
public void m1() {
//局部变量必须用final
final int i=10;
//局部内部类
//局部内部类不能用访问控制权限符修饰
class 局部内部类{
//内部类不能用静态声明
//public static void m2() {}
//成员方法
public void m3() {
System.out.println(i);//10
}
}
//调用m2
局部内部类 n=new 局部内部类();
n.m3();
}
//入口
public static void main(String[] args) {
局部 q=new 局部();
q.m1();
}
}
4. 匿名内部类
package javase.jingjie.内部类;
/**
* 匿名内部类无法重复使用
* */
public class 匿名 {
//静态方法
public static void t(CustomerService cs) {
cs.logout();
}
//入口
public static void main(String[] args) {
//调用t方法
t(new CustomerServiceImpl());
//使用匿名内部类的方式执行t方法
//整个“new CustomerService(){}”就是个匿名内部类
t(new CustomerService() {
public void logout() {
System.out.println("系统已经安装好了");
}
});
}
}
//接口,不能创建对象,所以调用不了,
interface CustomerService{
//退出系统
void logout();
}
//编写一个类去实现接口,这样父类继承接口,调用父类就访问接口了
class CustomerServiceImpl implements CustomerService{
public void logout() {
System.out.println("系统已经安全退出");
}
}