内部类概念

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高级特性--内部类的更多相关文章

  1. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  2. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型

    paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...

  3. Java高级特性-String、StringBuffer和StringBuilder

    Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...

  4. java高级特性增强

    第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...

  5. Java高级特性——反射机制(第二篇)

    在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...

  6. Java高级特性1_流库_初体验

    Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...

  7. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  8. Java高级特性之泛型

    首先我们先提出两个问题: 什么是泛型? 为什么要使用泛型?我们先来看看第一个问题什么是泛型.如果你对Java三大特性中的多态性理解的比较透彻的话,泛型就比较好理解了.多态性表示一个对象具备多种状态.比 ...

  9. Java高级特性 第5节 序列化和、反射机制

    一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...

随机推荐

  1. python3没有了xrange

    升级到python3的同学应该会注意到以前经常用的xrange没了! 是的,python3的range就是xrange.直接看效果!   Python 2.7.13 (v2.7.13:a06454b1 ...

  2. js作用域的销毁、不立即销毁、不销毁

    JavaScript中的函数执行会形成私有的作用域. (1)作用域的销毁 一般情况下,函数执行形成一个私有的作用域,当执行完成后就销毁了->节省内存空间 (2)作用域的不立即销毁 functio ...

  3. socket.io的基本使用

    服务端: 1.监听客户端连接: io.on("connection",socket=>{ }); 不分组数据传输:传输对象为当前socket 2.1给该socket所有客户端 ...

  4. sass进阶

    代码的重用 基础的部分我们讲述了变量 Mixin 这两种方法可以增加扩展和重用 现在开始继续学习:extend继承 .class1 { border: 1px solid #ddd; } .class ...

  5. _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据

    [python] view plain copy sql = "INSERT  INTO test_c(id,name,sex)values(%s,%s,%s)" param =  ...

  6. SpringBoot+Shiro+mybatis整合实战

    SpringBoot+Shiro+mybatis整合 1. 使用Springboot版本2.0.4 与shiro的版本 引入springboot和shiro依赖 <?xml version=&q ...

  7. JAVA数据库连接池的革命 -- 从BoneCP到HikariCP(转)

    从BoneCP到HikariCP 今天笔者本想更新一下项目中使用到的BoneCP版本的.却无意发现jolbox网站打不开了.起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如 ...

  8. System V启动脚本启动的服务

    /etc/rc.d/init.d/目录下的内容如下:这些常用的服务器都是System v的服务,要控制System V 的服务,我们可以使用以下命令 #/etc/rc.d/init.d/script  ...

  9. xor

    xor 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Your are given n ...

  10. eclipse中部署web项目

    因为eclipse是免费的,所以很多企业都会选用eclipse作为开发工作,那么我们就需要熟练使用eclipse部署web项目. 第一步:选择window -> preferences ,选择s ...