CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:Java学习记录
话题描述:
- 内部类
- 静态内部类
- 实例内部类
- 局部内部类(稍微了解)
有static修饰 属于外部类本身,会加载一次
成分研究:类有的成分都有
静态内部类访问:外部类名称.内部类名称
静态内部类创建对象的格式:
外部类名称.内部类名称 对象名 = new 外部类名称.内部类的构造器();
静态内部类的访问拓展:
静态内部类可以直接访问外部类的静态成员 因为属于类本身
静态内部类不可以访问外部类的实例成员 因为外部类的成员必须用外部类对象访问
小结:
静态内部类属于外部类的本身 只会加载一次
实例内部类
无static修饰的内部类,属于外部类的对象,跟着对象一起加载
成分特点:实例内部类不能定义静态成员,其他都可以定义,可以定义常量
实例内部类的访问格式:外部类名称.内部类名称
创建对象格式:
外部类名称.内部类名称 对象名 = new 外部类构造器.new 内部类的构造器()
拓展:
实例内部类是否可以注解访问外部类的静态成员? 可以的 外部类的静态成员可以被共享访问**
实例内部类中是否可以访问外部类的实例成员? 可以的 实例内部类属于外部类对象 可以直接访问当前
局部内部类(稍微了解) 定义在方法中,在构造器中,代码块中,for循环中定义的类
就是局部内部类
只能定义实例成员,不能定义静态成员
可以定义常量
④匿名内部类(重点)
概念:
就是一个没有名字的局部内部类
匿名内部类目的: 简化代码,开发中常用的形式
格式:
new 类名|抽象类|接口(形参){
方法重写;
};
匿名内部类的特点:
1.匿名内部类是一个没有名字的内部类
2.匿名内部类一旦写出来,就会立即创建一个匿名内部类的对象返回。
3.匿名内部类的对象的类型相当于是当前new的那个类型的子类类型
package com.day7_inner;
public class InnerClass3 {
public static void main(String[] args) {
//new 匿名内部类
Animal a = new Animal(){
@Override
public void run() {
System.out.println("猫跑起来咯");
}
};
a.run();
a.go();
}
}
abstract class Animal{
public abstract void run();
public void go(){
System.out.println("跑起来咯0.0");
}
}
CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f



