Java基础回顾三

内部类:更好的实现了信息隐藏;在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,这样的类称为内部类;与之对应,包含内部类的类被称为外部类。

内部类:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

成员内部类:也称为普通内部类

class Outter{
    
    private Inner inner = null;
    
    public Inner getInnerInstance(){
        if(inner == null)
            inner = new Inner();
        return inner;
    }

    class Inner{//成员内部类
        public Inner(){
            
        }
    }    

}

获取成员内部类的方法:

  1. new 外部类.new 内部类
  2. 外部类对象.new 内部类
  3. 外部类对象.获取方法

成员内部类:1.内部类在外部使用时,不能直接实例化,需要借助由外部类信息才能完成实例化;2.内部类可以通过访问外部类的成员;3.如果出现同名属性,优先访问内部类中定义的;4.外部类访问内部类信息,需要通过内部类实例,无法直接访问;5.内部类的访问修饰符,可以任意,但是访问范围是受到影响;6.可以使用外部类.this.成员的方式,访问外部类中同名的信息;6.内部类编译后.class文件命名:外部类$内部类.class;7.内部类中是可以包含与外部类相同方法签名的方法,内部类如何调用外部类:外部类名称.this.方法。

静态内部类:static修饰内部类

class Outter{
    
    public Outter(){

    }

    static class Inner{//静态内部类
        public Inner(){

        }
    }
}

1.静态内部类对象可以不依赖于外部类对象,直接创建;2.静态内部类,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例调用;3.创建静态内部类对象实例时,可以不依赖于外部类对象;3.可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员。4.如果内部类属性与外部类属性同名时,默认直接调用内部类中的成员。5.需要访问外部类的静态属性,可通过外部类.属性的方式。5.需要访问外部类的非静态属性,可以通过new 外部类().属性的方法。

方法内部类:定义在外部类方法中的内部类,也成为局部内部类。

class People(){
    
    public People(){
    
    }
}

class Man{
    public Man(){
        
    }

    public Peopele getWoman(){
        class Woman extends People{//局部内部类
            int age = 0;
        }
        return new Woman();
    }
}

方法内定义的局部变量只能在方法里使用,方法内不能定义静态成员。

方法内部类:1.定义在方法内部,作用范围也在方法内;2.和方法内部成员使用规则一样,class前面不可以添加public,private,protected,static;3.类中不能包含静态成员;4.类中可以包含final,abstract修饰的成员。

匿名内部类;没有名字的内部类(只有使用一次),所以将类的定义与类的创建,放到一起完成。

public class Demo {
	
	public static void main(String []args) {
		Thread t = new Thread() {//Thread类匿名内部类
			public void run() {
				for(int i = 1; i <= 5; i++) {
					System.out.print(i + " ");
				}
			}
		};
		t.start();
	}

}

使用场景:

  1. 只用到类的一个实例
  2. 类在定义后马上用到
  3. 给类命名并不导致代码更容易被理解

注意事项:

  1. 编译后的文件命名:外部类$数字.class
  2. 无法使用public,private,abstract,static修饰,匿名内部类不能出现抽象方法
  3. 无法编写构造方法,可以添加构造代码块
  4. 不能出现静态成员
  5. 匿名内部类可以实现接口也可以继承父类,但是不可兼得
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值