JAVA高级特性--内部类
内部类概念
public class Outer{
class inner{
}
}
特点
可以很好的实现隐藏,可以使用procted,private
可以直接访问外部类的所有成员 ,包括私有成员.
外部内不能访问内部类的成员,必须首先建立内部类的 对象才可访问
成员内部内及应用
//外部内不能访问内部内属性和方法,必须创建对象
//内部类中不能有静态方法和属性
//内部类可以访问Outer.this.name外部内属性
//静态常量在内部类中是可以的
package com.tanlei.newer;
public class MemberInner {
public static void main(String[] args) {
//创建外部内对象
Outer outer=new Outer();
outer.show();
//创建内部类对象
Outer.Inner inner=outer.new Inner();
inner.show();
}
}
class Outer {
private String name = "tanle";
private int num = 10;
public void show() {
System.out.println(name + num);
//外部内不能访问内部内属性和方法,必须创建对象
Inner inner1 =new Inner();
inner1.show();
}
public class Inner {
private String name = "lisi";
private int num = 20;
public void show() {
//内部类中不能有静态方法和属性
//内部类可以访问Outer.this.name外部内属性
//静态常量在内部类中是可以的
System.out.println(Outer.this.name +" 内部类"+ num);
}
}
}
静态内部类
特点:
使用static修饰的成员内部类叫做静态内部类
外部类名.内部类名 实例名=new 外部类名.内部类名(参数).
限制
静态内部类不能与外部类重名
不能访问外部类的非静态的属性和方法,外部类不能访问内部类的非静态 的属性和方法
匿名内部类
特点
没有名称的内部类,没办法引用他们,必须在创建时作为new语句的一部分来声明并创建他们的实例
必须继承一个类或者实现一个接口
语法
new interface接口的实现类/superclass子类(){
//类体
}
package com.pojo;
public class Anoon {
public static void main(String[] args) {
Person person=new Person();
/*Anamill dog=new DOGG();*/
person.feed(new Anamill() {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println();
}
} );
}
}
abstract class Anamill{
public abstract void eat();
}
/*class DOGG extends Anamill{
@Override
public void eat() {
System.out.println("啃骨头");
}
}*/
class Person{
public void feed(Anamill anamill) {
anamill.eat();
}
}
局部内部类
特点
定义在代码块,方法体类的
局部内部类不能加访问修饰符
package com.pojo;
public class localInner {
public static void main(String[] args) {
Outer3 outer3=new Outer3();
outer3.showOuter();
}
}
class Outer3{
private String name="zhangs";
private int agw =20;
private static int num=20;
public void showOuter() {
final int mun44=50;//局部内部类只能访问声明其方法的常量
class Inner3{
private int mun3=30;
private int num4=40;
public void showInner() {
System.out.println(mun3);
System.out.println(num4);
System.out.println(Outer3.this.name);
System.out.println(Outer3.num);
System.out.println(mun44);
}
}
Inner3 inner3=new Inner3();
inner3.showInner();
}
}
案例
package com.pojo;
import java.util.Arrays;
import com.pojo.Arraydemao.Entty;
public class Conter {
public static void main(String[] args) {
Arraydemao arraydemao=new Arraydemao();
arraydemao.put("1", "a");
arraydemao.put("2", "b");
arraydemao.put("3", "c");
arraydemao.put("4", "d");
arraydemao.put("5", "e");
Arraydemao.Entty [] entties1=arraydemao.getentties();
for (int i = 0; i < entties1.length; i++) {
Entty entty=entties1[i];
System.out.println(entty.getKey());
System.out.println(entty.getValue());
}
}
}
class Arraydemao{
//存放entry对象的数组,默认大小为5
private Entty[] entties=new Entty[5];
private int count=0;//下标
//对外提供的一个接口向容器中存放封装好的数据
public void put(String key,String value) {
Entty entry=new Entty();
entry.setKey(key);
entry.setValue(value);
entties[count++]=entry;//存放Entry对象到数组中
//数组扩容
if (count>=entties.length) {
System.out.println("容器满了");
//扩容后的新数组的大小
int newCapacity=entties.length*2;
//把老数组中的数据复制到长度为newCapacity薪数组中
entties=Arrays.copyOf(entties,newCapacity);
}
}
//把容器中的有数据内容返回
public Entty[] getentties() {
return Arrays.copyOfRange(entties, 0, count);
}
//把键值对封装在Entry对象中
public static class Entty{
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
JAVA高级特性--内部类的更多相关文章
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- Java高级特性-String、StringBuffer和StringBuilder
Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...
- java高级特性增强
第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性1_流库_初体验
Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- Java高级特性之泛型
首先我们先提出两个问题: 什么是泛型? 为什么要使用泛型?我们先来看看第一个问题什么是泛型.如果你对Java三大特性中的多态性理解的比较透彻的话,泛型就比较好理解了.多态性表示一个对象具备多种状态.比 ...
- Java高级特性 第5节 序列化和、反射机制
一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...
随机推荐
- T2485 汉诺塔升级版(普及)(递归)
https://www.luogu.org/problem/show?pid=T2485 题目背景 汉诺塔升级了 题目描述 现在我们有N个圆盘和N个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘 ...
- 现在学习 JavaScript 的哪种技术更好:Angular、jQuery 还是 Node.js?(转)
本文选自<开发者头条>1 月 7 日最受欢迎文章 Top 3,感谢作者 @WEB资源网 分享. 欢迎分享:http://toutiao.io/contribute 这是一个发布在 Quor ...
- DjangoORM查询、分页、ckeditor
查询数据 Django的批量查询(查询所有,或者条件查询)返回的是queryset对象. Queryset对象是一个惰性对象,在不执行 1.排序 2.循环 3.截取 操作的情况下,不会遍历序列的内容. ...
- Python基础-列表、元组、字典、字符串
Python基础-列表.元组.字典.字符串 多维数组 nums1 = [1,2,3] #一维数组 nums2 = [1,2,3,[4,56]] #二维数组 nums3 = [1,2,3,4,['a ...
- torch.backends.cudnn.benchmark = true 使用情形
设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题. 应该遵循以下准则: 如果网络的输入数据维度或类型上变化不大,设置 ...
- Leetcode8.String to Integer (atoi)字符串转整数(atoi)
实现 atoi,将字符串转为整数. 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字 ...
- 对C语言内存对齐的初步了解
在解释内存对齐的作用前,先来看下内存对齐的规则: 1. 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身 ...
- bzoj3899 弦论
好久没有更blog了啊... 对于一个给定长度为N的字符串,求它的第K小子串是什么. 这是一个SAM的模板题. 我好弱啊这个时候才开始学SAM,才会用指针. 要维护3个东西:每个状态right集合的大 ...
- maven与sbt修改国内镜像
一.idea中的maven 1.打开IntelliJ IDEA->Settings ->Build, Execution, Deployment -> Build Tools > ...
- Mysql+php报错原因
SQL syntax --语法错误,看near,错误会在near后引号中的内容 的附近 Table/Database....... dosen't existes ---表/库(库名/表名) 不存在 ...