Java内部类的定义和使用
为什么要用到内部类:
在java开发学习中我们经常会碰到内部类。内部类又有很多的优势:首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法名称参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口。由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能。不过你可能要质疑,更改一下方法的不就行了吗?的确,以此作为设计内部类的理由,实在没有说服力。真正的原因是这样的,java中的内部类和接口加在一起,从而java 通过内部类加上接口,可以很好的实现多继承的效果。
内部类的分类和使用
package one;public class Outer{private static int outer_i = 1;private int k=20;public static void outer1(){//... }//成员内部类class Inner{int j=100;//内部类中外部类的实例变量可以共存int inner_i=1;void inner1(){System.out.println(outer_i);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量System.out.println(j);//在内部类中访问内部类自己的变量直接用变量名System.out.println(this.j);//也可以在内部类中用"this.变量名"来访问内部类变量//访问外部类中与内部类同名的实例变量可用"外部类名.this.变量名"。System.out.println(k);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量 outer1();}}//外部类的非静态方法访问成员内部类public void outer2(){Inner inner = new Inner();inner.inner1();}//外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样public static void outer3(){Outer out = new Outer();//step1 建立外部类对象Inner inner=out.new Inner();//step2 根据外部类对象建立内部类对象inner.inner1();//step3 访问内部类的方法 }public static void main(String[] args){outer3();} }
2、局部内部类: 即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。
public class Outer {public void say(){System.out.println("关门说真话!");} }
public class Test {public void ting(){class MiMi extends Outer{//定义一个局部的内部类,继承Outer方法//…… }new MiMi().say();//调用局部内部类中继承的say方法 System.out.println("别人都不知道");}public static void main(String[] args) {new Test().ting();} }
3、静态内部类: 静态内部类定义在类中,任何方法外,用static定义。注意:静态内部类中可以定义静态或者非静态的成员
package three;public class StaticTest { private static String name="abc";private String sex="男";static class Person{private String age = "18";//内部私有成员public String heigth = "180";//内部类公有成员public void display(){//System.out.println(sex);//报错,不能直接访问外部类的非静态成员System.out.println(name);//只能直接访问外部类的静态成员System.out.println(age);//访问本内部类成员。 } }public void testone(){Person person = new Person();person.display();//System.out.println(heigth);//报错,是因为不可以直接访问内部类私有成员//System.out.println(age);//报错,是因为不可以直接访问内部类公有成员System.out.println(person.age);//可以访问内部类的私有成员System.out.println(person.heigth);//可以访问内部类的公有成员 } public void testtwo(){StaticTest st = new StaticTest();System.out.println(name);System.out.println(sex);//System.out.println(age);//不可以直接访问内部类的成员//System.out.println(heigth);//不可以直接访问内部类的成员 }public static void main(String[] args) { //调用StaticTestStaticTest staticTest = new StaticTest(); staticTest.testone(); staticTest.testtwo();} }
package three;abstract class parent {public abstract void like(); }public class Demo {public static void main(String[] args) {parent pt = new parent(){public void like(){System.out.println("吃饭睡觉打豆豆。。。");}};pt.like();} }
匿名类与内部的联系与区别:
内部类总结:
转载于:https://www.cnblogs.com/xiao-chuan/p/6014752.html
Java内部类的定义和使用相关推荐
- java内部类的定义原则
/* 内部类的访问规则: 1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this 2,外部类要访问内 ...
- java内部类的定义_java定义内部类
package test.jdk; public class InnerTest { private String instAtt = "实例变量"; private static ...
- 看到如此详细的Java内部类,我泪目了
Java内部类 介绍 定义 成员内部类 语法格式 使用说明 代码示例 局部内部类 语法格式 使用说明 代码示例 匿名内部类 语法格式 使用说明 代码示例 静态内部类 语法格式 使用说明 代码示例 介绍 ...
- 如何新建java内部类_java内部类-1(内部类的定义)
小胖从官网出发,研究下为什么我们需要些内部类,内部类的区别和联系. 思考三个问题: (1)为什么需要内部类?静态内部类和非静态内部类有什么区别: (2)为什么内部类可以无条件访问外部类成员: (3)为 ...
- Java内部类手机专卖店_Java(20)内部类
内部类 一个定义在另一个类里面的类称为内部类.内部类可以分为四种形式:成员内部类, 成员内部类 内部调用外部的属性和方法 成员内部类可以无条件访问外部类的所有成员属性和方法. 其他类(例子中的RunC ...
- java内部类 缺点_Java中的内部类及其优势
Java中提供了定义内部类的选择,这一机制使得代码的书写更为方便和优雅(功能上相关的代码被紧密的组织在了一起). 需要注意的是,内部类和传统的组合(即将一个类的实体定义为另一个类的成员)是完全不同的, ...
- Java 内部类及其原理
Java中实现内部类 内部类相信大家都用过很多次了,就不说它是怎么用的了. 内部类 1.成员内部类 需要注意的是, 当成员内部类拥有和外部类同名的成员变量或这方法时, 默认情况下访问的是内部类的成员, ...
- java内部类gc_Java内部类持有外部类的引用详细分析与解决方案
在Java中内部类的定义与使用一般为成员内部类与匿名内部类,他们的对象都会隐式持有外部类对象的引用,影响外部类对象的回收. GC只会回收没有被引用或者根集不可到达的对象(取决于GC算法),内部类在生命 ...
- Java 内部类分析
一.简介 因为现在是Android开发实习生.发现在发展过程中越来越多,但他们知道什么时候该使用真实的情况,但没有获得,例如,使用内部类,因此,学习和自己的总结后发现,通过互联网的信息,家分享,如有不 ...
最新文章
- 做时间序列预测没必要深度学习!GBDT性能超DNN
- RS485 串口调试如何操作
- Python100入门题 | 第001题
- 活体检测方法概述与总结
- 曹大带我学 Go(5)—— 哪里来的 goexit
- 台式电脑怎么看计算机型号,怎么查看台式机的型号
- matlab将程序变量写入标题,如何该这段MATLAB程序(把一个常量改成变量)
- 自动驾驶——目标检测(Camera传感器)的学习笔记
- 在使用DelphiXE3和SQLite3进行程序开发时,解决最后一个字符乱码的问题
- 约瑟夫环-单向循环链表
- 均值(Mean)和均值标准误差(S.E. Mean)
- Vrep基础部分(二)
- 微信小程序--获取当前时间
- 冤家路窄?——软件开源与软件专利保护
- 自定制vs插件--LearnVSXNow!-#4 创建一个带有工具窗的Package
- 网络与信息安全领域泰斗
- AI赋能在线教育 , 大数据驱动下 , 精准营销如何布局?
- 强盗问题动态规划详解
- 前端知识之angular组件库之NG-ZORRO-ANTD结构窥探(三)pipe ,polify,service
- 信息系统项目管理师Part16-物联网
热门文章
- linux服务器用哪个面板好,Linux服务器管理面板哪家比较好用?
- python众数问题给定含有n个元素的多重集合s_分治法求众数 给定含有n个元素的多重集合S 联合开发网 - pudn.com...
- php 去除 html 属性,用PHP 去掉所有html标签里的部分属性
- python 微信支付接口 详解_Python支付接口汇总大全(包含微信、支付宝等,长期更新、欢迎补充)...
- curl命令java_上curl java 模拟http请求
- suse linux 查看cpu,Suse Linux zmd 耗用100% CPU
- Java PushbackReader ready()方法与示例
- php的延时sleep函数
- eclipse和Tomcat绑定
- php having,having方法