✨前言✨
文章目录 博客主页:to Keep博客主页
欢迎关注,点赞,留言评论
⏳首发时间:2022年3月6日
博主码云地址:博主码云地址
参考书籍:java核心技术 卷1
编程练习:牛客网+力扣网
由于博主目前也是处于一个学习的状态,如有讲的不对的地方,请一定联系我予以改正!!!
1 本地内部类2 实例内部类
2.1 成员变量2.2 创建对象2.3 访问相同的成员变量 3 静态内部类
3.1 成员变量3.2 创建对象3.3 访问成员变量 4 匿名内部类5 总结
1 本地内部类位于方法内部的类就是本地内部类,这种类其实没有很大的作用,用的非常少,所以作为一个了解就可以了
public class TestMO {
public void func(){
//位于方法内部的类,只能在该方法内使用。
class Test{
public int a;
}
}
public static void main(String[] args) {
}
}
2 实例内部类
2.1 成员变量
实例内部类其实就是位于外部类的里面,与外部类中的其他成员变量一样,它是属于对象的,但会拥有一些类的特点!
class open{
public int a = 10;
public static int b = 20;
//实例内部类,相当于外部类的一个普通的成员变量
class inopen{
public int a = 23;
//public static b = 22; Error
public void inTest(){
System.out.println("inTest()");
}
}
public void test(){
System.out.println("test()");
}
}
2.2 创建对象说明内部类里面是不能定义静态变量的,只能定义静态常量
接下来我们看一样如何创建内部类的对象:
public class TestMO {
public static void main(String[] args) {
open open = new open();
open.inopen in = open.new inopen();
}
}
2.3 访问相同的成员变量由于内部类是实例内部类,所以它需要依靠对象的,所以在创建对象时,需要用到外部类的引用来创建,语法:外部类.内部类 + 变量 = 外部类的引用.new 内部类();
当内部类与外部类有相同的变量时:
3 静态内部类 3.1 成员变量对于内部类本身可以使用this.a或者直接就是a就可以访问到内部类的a,而对于外部类中的成员变量,我们需要使用:外部类类名.this.a,所以这个就是对于实例内部类就会存在两个this的问题的答案!
静态内部类就是比实例内部类多加了static关键字去修饰,这也就意味着静态内部类就不是依赖于对象的了,而是属于类的了!
class Tree{
public int data1 = 12;
public static int data2 = 16;
//利用static关键字修饰的类 静态内部类
static class inclass{
public int data3 = 13;
public static int data4 = 15;
public void intest(){
System.out.println("test()");
}
}
public void test(){
System.out.println("test()");
}
}
3.2 创建对象静态内部类时可以定义静态的成员变量的
我们在看一看静态内部类是怎样创建对象的
class Tree{
public int data1 = 12;
public static int data2 = 16;
//利用static关键字修饰的类 静态内部类
static class inclass{
public int data3 = 13;
public static int data4 = 15;
public void intest(){
System.out.println("test()");
}
}
public void test(){
System.out.println("test()");
}
}
public class TestMO {
public static void main(String[] args) {
Tree.inclass inclass = new Tree.inclass();
}
}
3.3 访问成员变量由于静态内部类是不属于对象的,而是属于类的,所以我们可以利用类来直接创建
语法: 外部类类名.内部类类名+变量 = new 外部类类名.内部类类名();
我们可以发现,静态内部类是不可以访问外部类的非静态成员变量,因为静态的属性是属于类的,而不是对象的,如果要访问,必须要先在内部类中,创建外部类的对象,然后通过对象的引用进行访问!
4 匿名内部类对于静态内部类与实例内部类,我们之前学过的节点与链表就可以使用内部类来解决,因为链表是由一个个节点组成的,所以内部类适用于一个类是由那几个部门组成的!
匿名内部类的语法:new 类名(){};这种就是匿名内部类,它的访问就是在new 类名(){}.方法/成员变量
class Tree{
public int data1 = 12;
public static int data2 = 16;
public void test(){
System.out.println("test()");
}
}
public class TestMO {
public static void main(String[] args) {
new Tree(){
@Override
public void test(){
System.out.println("重写test()");
}
}.test();
}
}
5 总结可以理解为new Tree继承了TestMO,重写了test()方法所以就会打印重写之后的,对于匿名内部类的使用,在前面我们所学的java对象的比较时,用的就是一个匿名内部类,通过重写comparator方法,进行对象的比较!
对于内部类语法,我们只需要了解语法规则即可,不必过多的深究,只需要知道如何使用,使用的时候应该注意那些细节!!!



