内部类是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
public class People {
// 内部类
public class Heart{
}
}
private protected
等修饰,封装性可以做更多控制。有static修饰,属于外部类本身。
它的特点和使用与普通类完全是一样的,类有的成分它都有,只是位置在别人里面而已。
public class Outer{
// 静态成员内部类
public static class Inner{
}
}
1、静态内部类中是否可以直接访问外部类的静态成员?
2、静态内部类是否可以直接访问外部类的实例成员?
1、静态内部类的使用场景、特点、访问总结:
无static修饰,属于外部类的对象;
JDK16之前,成员内部类中不能定义静态成员,JDK16开始也可以定义静态成员了。
public class Outer{
// 成员内部类
public class Inner{
}
}
格式:
外部类名.内部类名 对象名 = new 外部类构造器.new 内部类构造器();
Outer.Inner in = new Outer().new Inner();
1、成员内部类中可以直接访问外部类的静态成员?
2、成员内部类的实例方法中可以直接访问外部类的实例成员?
1、成员内部类是什么样的?特点是什么?
2、成员内部类如何创建对象?
请观察如下代码,写出合适的代码对应其注释要求输出的结果。
注意:在成员内部类中访问所在外部类对象,格式:
外部类名.this
解答:
本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等。
作用: 方便创建于子类对象,最终目的为了简化代码编写。
格式:
new 类|抽象类名|接口名() {
重写方法;
};
Employee a = new Employee() {
public void work() {
}
};
a.work();
1、匿名内部类的作用是什么?
2、匿名内部类的语法格式?
Employee a = new Employee() {
public void work(){
}
};
a.work
3、匿名内部类的特点?
package com.app.d8_innerclass_anonymous;
/**
目标:掌握匿名内部类的使用形式(语法)
*/
public class Test2 {
public static void main(String[] args) {
// 使用匿名内部类实现接口
Swimming s1 = new Swimming() {
@Override
public void swim() {
System.out.println("学生快乐的自由泳🏊~");
}
};
go(s1); // 将作为实现类的匿名内部类传入go()方法一起比赛
System.out.println("------------------------------");
Swimming s2 = new Swimming() {
@Override
public void swim() {
System.out.println("老师游🏊得很快~~~");
}
};
go(s2);
System.out.println("------------------------------");
// 直接将作为接口实现类的匿名内部类作为实参传入go方法
go(new Swimming() {
@Override
public void swim() {
System.out.println("运动员🏊贼快~~~~~~");
}
});
}
public static void go(Swimming swimming){
System.out.println("开始比赛....");
swimming.swim(); // 正在比赛
System.out.println("结束比赛....");
}
}
/**
游泳接口
*/
interface Swimming{
void swim();
}
开始比赛....
学生快乐的自由泳🏊~
结束比赛....
------------------------------
开始比赛....
老师游🏊得很快~~~
结束比赛....
------------------------------
开始比赛....
运动员🏊贼快~~~~~~
结束比赛....
Process finished with exit code 0
使用总结:匿名内部类可以作为方法的实际参数进行传输。
package com.app.d8_innerclass_anonymous;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
目标:通过GUI(桌面)编程,理解匿名内部类的真实使用
[超前内容,目的就是为了让大家知道匿名内部类最终目的就是为了简化代码的编写]
*/
public class Test3 {
public static void main(String[] args) {
// 1、创建桌面窗口
JFrame win = new JFrame("登录界面");
// 2、创建一个块桌布垫在桌面窗口上
JPanel panel = new JPanel();
win.add(panel);
// 3、创建一个按钮对象
JButton btn = new JButton("登录");
// 4、把按钮对象添加到桌布上展示
panel.add(btn);
// 5、展示窗口
win.setSize(400,300);
win.setLocationRelativeTo(null);
win.setVisible(true);
/**
注意:重点讲解匿名内部类的实际使用
*/
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(win, "点我一下,说明爱我!!");
}
});
/**
匿名内部类最终目的:
这是一种新形式,大家只需要知道匿名内部类在实际开发中的目的就是为了简化代码编写
*/
// btn.addActionListener( e -> JOptionPane.showConfirmDialog(win, "别说话!吻我~~") );
}
}
使用总结:开发中并不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用。
匿名内部类的代码可以实现代码进一步的简化(回扣主题)。