引言
之前断了几天,给自己的理由是要期末考了,得复习。但是今天突然意识到我在又一次的自欺欺人,因为我最近的复习时间远远没有多到没有时间学习java的程度~。。。。。
总之,以后会每天坚持更新,无论知识学习的多与少,都会坚持打卡。
内部类
内部类的定义:定义在一个类里面或方法里的类,叫做内部类
内部类可分为成员内部类和局部内部类,其中匿名内部类属于局部内部类,也是今天的重点和以后的常用知识。
成员内部类
构造格式
修饰符 外部类 {
//...
修饰符 内部类{
//...
}
//顾名思义,成员内部类类作为外部类的一个成员
}
成员内部类的使用方法:
先创建一个外部类
public class T1_Body {
//把外部类与内部类的关系理解为身体与心脏,便于记忆。
String la="我是外部类的变量";
public class Heart{
String la="我是内部类全局变量";
public void shownum(){
String la="我是内部类的局部变量";
System.out.println(la);
System.out.println(this.la);
System.out.println(T1_Body.this.la);
}
public void beat(){
System.out.println("心脏在跳动");
}
}
public void LookHeart(){
System.out.println("心脏还跳吗?");
new Heart().beat();
//匿名对象
// Heart h1=new Heart(); h1.beat();
}
}
【PS】关于成员内部类中的重名方法调用问题
System.out.println(la);
//调用内部类的方法中的变量
System.out.println(this.la);
//调用内部类中变量
System.out.println(T1_Body.this.la);
//调用外部类中变量 ->外部类.this.num;
创建一个测试类(Main):
package InnerClass;
public class T1_test {
public static void main(String[] args) {
//使用内部类方法1
//使用外部类的方法调用内部类
T1_Body test=new T1_Body();
test.LookHeart();
System.out.println("=====================");
//方法2,直接调用【使用匿名对象更简洁】
//注意固定格式 -> 外部类.内部类 name=new 外部类().new 内部类();
T1_Body.Heart h2=new T1_Body().new Heart();
h2.beat();
System.out.println("=====================");
h2.shownum();
}
}
局部内部类
构造格式
局部内部类定义与方法中,【只能在方法中使用】。
外部类 {
//...
修饰符 method(){
//...
class 局部内部类{
//...
}
}
}
如果局部内部类想访问所在方法的变量,要保证该变量时【final】的。
类的权限修饰符
修饰符权限
public > protected > (default) > private
各种类所能用的修饰符

外部类 :public / (default)
成员内部类:public / protected / (default) / private
局部内部类:啥都没得(不是default)
接下来重头戏
【最常用!!!】
匿名内部类
使用情景
当接口的实现方法(impl)或父类的子类【只出现一次】的时候,用匿名类更好。
举以下的例子来证明
一般我们实现一个接口是先创建一个接口类(*.java),然后再创建一个接口实现类(*iml.java),最后写一个测试类(test.java),非常麻烦.
public interface T2_Interface {
void method();
}
//接口 文件名 --> T2-Interface.java
public class T2_IML implements T2_Interface{
@Override
public void method() {
System.out.println("这次打酱油的是,难受");
}
}
//接口实现类 文件名 --->T2_IML.java
public class T2_test {
public static void main(String[] args) {
// T2_IML t2=new T2_IML();
//也可以直接用接口类
T2_Interface =t2=new T2_IML();
t2.method();
}
};
}
}
//最后测试类
我们用匿名类就可以少写一个(*iml.java)接口实现类。增强代码可读性。
public static void main(String[] args) {
//这里是内部类,又没有名字,故而叫做匿名内部类
T2_Interface t21=new T2_Interface() {
//接口在这里实现
@Override
public void method() {
System.out.println("【匿名内部类】今天我是主角");
}
};
t21.method();
}
但是当你的实现类【用到不止一次】时,就不能用匿名内部类了,因为每一个对象都要写一次,会使代码冗长。
本文详细解析Java内部类的概念,包括成员内部类和局部内部类,并重点介绍了匿名内部类的使用场景和优势,通过实例展示了如何在代码中有效应用。
709

被折叠的 条评论
为什么被折叠?



