当前位置: 首页 > news >正文

Java学习记录day9

类与对象

内部类

成员内部类

在一个类的内部定义的类。

public class Outer {private int a = 10;public void outMethod() {System.out.println("这是外部类中的方法");}// 成员内部类public class Inner{private int b = 10;public void innerMethod() {// 外部类的成员变量和方法a = 20;outMethod();	System.out.println("这是内部类中的方法");}}
}

方法内部类

内部类也可以放在方法内定义,但是注意,方法内部类只能在该类所在的方法的内实例化且不能使用方法的非final局部变量。jdk1.8后取消了在局部内部类中使用的变量必须显示的使用final修饰,编译器默认为这个变量加上final

public class App {public static void main(String[] args) {// TODO Auto-generated method stubOuter outer = new Outer();outer.test();}
}public class Outer {private int a = 10;public void show() {System.out.println("这是外部类中方法");}	public void test() {// 局部内部类class Inner {String name;public void innerMethod() {// 外部类的变量a = 30;name = "张三";System.out.println("这个局部内部类中的方法");}}// 在方法中创建局部内部类的对象Inner inner = new Inner();inner.innerMethod();}
}

静态内部类

在一个类内部定义一个静态内部类:即该内部类可以像其他静态成员一样,没有外部类对象时也能够访问他。

class Outer{static class Inner{System.out.println("这个静态内部类中");}
}
class Test{public static void main(String[] args){Outer.Inner n = new Outer.Inner();}
}

匿名内部类

匿名内部类就是没有名字的内部类,有三种:
1.继承式的匿名内部类

class Outer{public void printl(){Eat eat = new Eat(){public void eat(){System.out.println("继承式匿名内部类");}};eat.eat();}
}
public abstract Eat{public abstract void eat();
}
public class Test {public static void main(String[] args) {// TODO Auto-generated method stubOuter outer = new Outer();outer.printl();}
}

2.接口式的匿名内部类

//将继承式中的抽象类改为接口类即可

3.参数式的匿名内部类

class Outer{public void printl(Eat eat){eat.eat();}
}
public nterface Eat{public void eat();
}
public class Test {public static void main(String[] args) {// TODO Auto-generated method stubOuter outer = new Outer();outer.printl(new Eat(){public void eat(){System.out.println("参数式匿名内部类");}});}
}

综合使用:

//接口
public interface Usb {public void connected();
}
//定义usb设备
public class Computer {public void connect(Usb usb) {System.out.println("电脑连接usb外设");usb.connected();}
}
//匿名内部类
public class Test {public static void main(String[] args) {// TODO Auto-generated method stubComputer computer = new Computer();computer.connect(new Usb() {	@Overridepublic void connected() {// TODO Auto-generated method stubSystem.out.println("连接打印机");}});	computer.connect(new Usb() {		@Overridepublic void connected() {// TODO Auto-generated method stubSystem.out.println("连接鼠标");}});		Usb usb = new Usb() {			@Overridepublic void connected() {// TODO Auto-generated method stub}};computer.connect(usb);}
}

使用原则:

  1. 不能有构造方法,只能有一个实例;
  2. 不能定义任何静态成员,静态方法;
  3. 不能是public、protectde、private、static;
  4. 一定在new的后面,用其隐含实现一个接口或实现一个类;
  5. 匿名内部类为局部的,所以局部内部类的所有限制对其都生效。

http://www.lryc.cn/news/6568.html

相关文章:

  • ActiveReports.NET 17.0 Crack by Xacker
  • 【计算机网络】传输层TCP协议
  • Mysql5.7安装【Windows版】
  • 分布式一致性算法Raft原理图释
  • 网络安全-字典生成-crunch
  • 闪光桐人の实习日记
  • PostgreSQL 常见配置参数
  • JAVA 常用类型之String结构
  • 二三层网络设备封装与解封装原理
  • 9、MyBatis框架——使用注解开发实现数据库增删改查操作、一级缓存、二级缓存、MyBatis实现分页
  • C++STL剖析(六)—— set和multiset的概念和使用
  • SpringColud第四讲 Nacos的Windows安装方式和Linux的安装方式
  • 微服务项目【网关服务限流熔断降级分布式事务】
  • 【情人节用Compose给女神写个爱心动画APP】
  • GUI swing和awt
  • 速通Spring
  • 【C++】C++入门
  • Linux网络技术学习(五)—— 网络设备初始化(I)
  • [技术选型] ClickHouse和StarRocks的介绍
  • 算法刷题打卡第90天:表现良好的最长时间段
  • Python语言零基础入门教程(十七)
  • C语言中大小端问题
  • vue2+微前端qiankun从搭建到部署的实践(主子应用切换;集成vue3+vite3子应用)
  • 怎么代理微信小程序创业?
  • 今天是情人节呐,我利用Python制作了好多表白的东西,快来吧~
  • 【Linux】-- 进程信号(处理、内核)
  • C/【静态通讯录】
  • 万卷书 - 让孩子对自己负责 [The Self-Driven Child]
  • Postman中cookie的操作
  • torch.grid_sample