Java内部类应用
来源:互联网 发布:天刀冷酷女捏脸数据 编辑:程序博客网 时间:2024/06/06 05:51
一内部类的基本概念
1 把一个类放在另一类的内部定义,这个定义在其它类内部的类就被称为内部类,也叫嵌套类,包含内部类的类也被称为外部类,也叫宿主类。
2 内部类提供更好的封装,内部类成员可以直接访问外部类的私有数据。因为内部类是外部类的成员。
3 匿名内部类适用于创建那些仅需一次使用的类。
二非静态内部类基本概念
1 当在非静态内部类的方法内访问某个变量时,系统优先在该方法内查找是否存在该名字的局部变量,如果存在该名字的局部变量,就使用该变量,如果不存在,则到内部类中查找是否存在该名字变量,如果存在则使用该变量,总之,第一步,先找局部变量,第二步,内部类变量,第三步,外部类变量。
2 内部类分两种:使用static修饰的内部类是静态内部类,没有使用static修饰的内部类称为非静态内部类。
三 非静态内部类应用
1代码示例
public class Cow{private double weight;// 外部类的两个重载的构造器public Cow(){}public Cow(double weight){this.weight = weight;}// 定义一个非静态内部类private class CowLeg{// 非静态内部类的两个实例变量private double length;private String color;// 非静态内部类的两个重载的构造器public CowLeg(){}public CowLeg(double length , String color){this.length = length;this.color = color;}// 下面省略length、color的setter和getter方法public void setLength(double length){this.length = length;}public double getLength(){return this.length;}public void setColor(String color){this.color = color;}public String getColor(){return this.color;}// 非静态内部类的实例方法public void info(){System.out.println("当前牛腿颜色是:"+ color + ", 高:" + length);// 直接访问外部类的private修饰的成员变量System.out.println("本牛腿所在奶牛重:" + weight); //①}}public void test(){CowLeg cl = new CowLeg(1.2 , "黑白相间");cl.info();}public static void main(String[] args){Cow cow = new Cow(400);cow.test();}}
2运行结果
当前牛腿颜色是:黑白相间, 高:1.2
本牛腿所在奶牛重:400.0
3结果分析
3.1 Cowleg类定义放在另一类的内部,所以它就成了一个内部类。
3.2 外部类里包含了一个test方法,该方法里创建了一个Cowleg对象,并调用该对象的info方法,不难发现,在外部类使用非静态内部类时,与普通类并没太大区别。
四同名变量内部类访问应用
1代码示例
public class DiscernVariable{private String prop = "我是外部类的实例变量";private class InClass{private String prop = "我是内部类的实例变量";public void info(){String prop = "我是局部变量";// 通过 外部类类名.this.varName 访问外部类实例变量System.out.println("外部类的实例变量值:"+ DiscernVariable.this.prop);// 通过 this.varName 访问内部类实例的变量System.out.println("内部类的实例变量值:" + this.prop);// 直接访问局部变量System.out.println("局部变量的值:" + prop);}}public void test(){InClass in = new InClass();in.info();}public static void main(String[] args){new DiscernVariable().test();}}
2运行结果
外部类的实例变量值:我是外部类的实例变量
内部类的实例变量值:我是内部类的实例变量
局部变量的值:我是局部变量
3结果分析
程序中通过OutterClass.this.propName的形式访问外部类的实例变量,通过this.propName的形式访问非静态内部类的实例变量。
五外部类不能直接访问内部类变量举例
1代码示例
public class Outer{private int outProp = 9;class Inner{private int inProp = 5;public void acessOuterProp(){// 非静态内部类可以直接访问外部类的private成员变量System.out.println("外部类的outProp值:"+ outProp);}}public void accessInnerProp(){// 外部类不能直接访问非静态内部类的实例变量,// 下面代码出现编译错误// System.out.println("内部类的inProp值:" + inProp);// 如需访问内部类的实例变量,必须显式创建内部类对象System.out.println("内部类的inProp值:"+ new Inner().inProp);}public static void main(String[] args){// 执行下面代码,只创建了外部类对象,还未创建内部类对象Outer out = new Outer(); //①out.accessInnerProp();}}
2运行结果
内部类的inProp值:5
3结果分析
在外部类里访问非静态内部入厂尖的实例变量,会引起编译错误。
六非静态内部类错误用法一
1代码示例
public class StaticTest{// 定义一个非静态的内部类,是一个空类private class In{}// 外部类的静态方法public static void main(String[] args){// 下面代码引发编译异常,因为静态成员(main()方法)// 无法访问非静态成员(In类)new In();}}
2结果分析
不允许外部静态成员直接使用非静态内部类。
七非静态内部类错误用法二
1 代码示例
public class InnerNoStatic{private class InnerClass{/*下面三个静态声明都将引发如下编译错误:非静态内部类不能有静态声明*/static{System.out.println("==========");}private static int inProp;private static void test(){}}}
2 结果分析
在Java中不允许在非静态内部类里包含静态成员,否则会引发编译错误。
- java内部类应用
- Java内部类应用
- Java内部类应用总结
- java 内部类的四个应用场景
- 如何应用Java中的静态内部类
- java中的内部类详解和应用
- java内部类的应用场景
- java内部类的详解与应用
- java内部类应用之多继承 -列子
- Java静态内部类的实际应用
- Java基础-内部类及其应用
- java接口与内部类应用
- Java静态内部类的应用
- Java内部类的应用(初级)
- java内部类的应用场景
- Java 匿名类内部类 应用
- 内部类应用
- 内部类的应用
- 对于一个小白来说,遇到的前端问题(2)
- Linux常用命令及使用技巧(持续更新中)
- C++之类成员指针
- Realm更新字段
- mac 下配置adb
- Java内部类应用
- 屏幕截图的几种方法
- Linux下二进制软件安装
- Linux外在设备的使用
- CentOS 7系统服务管理工具systemctl介绍
- 使用android studio查看andrdoid源码
- MySQL MyISAM和InnoDB引擎的写入速度优化比较,分页速度优化
- POJ 1704 Georgia and Bob 阶梯尼姆博弈
- ffmpeg中I,P,B帧和PTS,DTS的理解