赞
踩
成员内部类
创建一个成员内部类
public class Outer {
private int age = 99;
public static String a;
public class Inner {
private String name;
private int age = 88;
public static String schoolName;// JDK 16开始才支持定义静态成员
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void test() {
System.out.println(age);
System.out.println(a);
int age = 66;
System.out.println(age);//66
System.out.println(this.age);//88
System.out.println(Outer.this.age);// 99
}
public void test2() {
System.out.println(age);
System.out.println(a);
}
}
}
public class Test {
public static void main(String[] args) {
// 目标:了解成员内部类和其特点。
Outer.Inner in =new Outer().new Inner();
in.test();
}
}
成员内部类中访问其他成员的特点:
public class Outer {
private int age;
public static String schoolName;
//静态内部类
public static class Inner {
private String name;
public static int a;
public void test() {
System.out.println(schoolName);
System.out.println(age);//不能访问
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void test2(){
System.out.println(schoolName);
System.out.println(age);//不能访问
}
}
静态内部类中访问外部类成员的特点
鸡肋语法,看看就好
匿名内部类
就是一种特殊的局部内部类;所谓匿名:指的是程序员不需要为这个类声明名字。
这段代码中创建一个子类的对象还需要单独写一个子类出来
public class Test {
public static void main(String[] args) {
// 目标:认识匿名内部类,并掌握其作用
Animal a = new Cat();
a.cry();
}
}
class Cat extends Animal {
@Override
public void cry() {
System.out.println("猫喵喵喵的叫~~~");
}
}
abstract class Animal {
public abstract void cry();
}
使用匿名内部类可以直接得到一个子类对象,而不需要再写一个类
public class Test {
public static void main(String[] args) {
// 目标:认识匿名内部类,并掌握其作用
//这就是匿名内部类,代码执行到这的时候会做两件事
//1.把这个匿名内部类编译成一个子类
//2.然后立即创建一个子类对象出来
Animal a = new Animal(){
@Override
public void cry() {
System.out.println("猫喵喵喵的叫~~~");
}
};
a.cry();
}
}
abstract class Animal {
public abstract void cry();
}
public class Test {
public static void main(String[] args) {
// 目标:掌握匿名内部类的常见使用场景。
// 创建匿名内部类
Swimming s1 = new Swimming() {
@Override
public void swim() {
System.out.println("狗玊飞快~~~~");
}
};
go(s1);
}
// 设计一个方法,可以接收swimming接口的一切实现类对象进来参加游泳比赛
public static void go(Swimming s) {
System.out.println("开始-----------------");
s.swim();
}
}
//猫和狗都要参加游泳比赛
interface Swimming {
void swim();
}
优化 匿名内部类在开发中通常作为一个参数直接传给方法的
public class Test {
public static void main(String[] args) {
// 目标:掌握匿名内部类的常见使用场景。
// 创建匿名内部类
Swimming s1 = new Swimming() {
@Override
public void swim() {
System.out.println("狗玊飞快~~~~");
}
};
go(new Swimming() {
@Override
public void swim() {
System.out.println("狗玊飞快~~~~");
}
};);
}
// 设计一个方法,可以接收swimming接口的一切实现类对象进来参加游泳比赛
public static void go(Swimming s) {
System.out.println("开始-----------------");
s.swim();
}
}
//猫和狗都要参加游泳比赛
interface Swimming {
void swim();
}
匿名内部类在开发中的真实使用场景
package com.qianxin.neibulei;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test {
public static void main(String[] args) {
// 拓展:搞清楚匿名内部类在开发中的真实使用场景。
// GUI编程
// 1、创建窗口
JFrame win =new JFrame( "登录界面");
JPanel panel=new JPanel();
win.add(panel);
JButton btn =new JButton( "登录");
panel.add(btn);
// 给按钮绑定单击事件监听器。
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(win,"登录一下");
}
});
// 最终的核心目的是:简化代码
btn.addActionListener(e ->JOptionPane.showMessageDialog(win, "登录一下"));
win.setSize(400,400);
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
win.setVisible(true);
}
}
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。