JAVA基础之内部类

2017-01-13

1、java中的内部类都有什么?!

    成员内部类

    局部内部类

    匿名内部类

    静态内部类

2、内部类详解

    •成员内部类

      在一个类的内部再创建一个类,成为内部类

      1)在一个类中使用内部类,可以在内部类中直接存取所在类的私有属性或方法

 class Outer{
//外部类Outer
private int i = 111 ;//外部类私有变量
class Inner{
//内部类Inner
private int j = 222 ;//内部类私有变量
public void print(){
System.out.println("外部类的私有属性"+ i);
System.out.println("内部类的私有属性"+ j);
}
}
}
public class ClassDemo5 {
public static void main(String[] args) {
Outer o = new Outer() ;
Outer.Inner i = o.new Inner() ;
i.print() ;
}
}

       2)内部类的实例化方法

import 面向对象基础.Outer.Inner;  
//第一种方式:导入import 面向对象基础.Outer.Inner;包
Outer.Inner i = o.new Inner() ;
//第二种方式:外部类.内部类 对象名 = 外部类对象.new 内部类

         3)外部类访问内部类

 class Fatch{
//外部类Fatch
public class Student{
//内部类Student
public void show(){
//内部类show()方法
System.out.println("内部类Student的show()方法");
}
}
public void print(){
/**
* 外部类不可以直接访问内部类的属性或方法,
* 必须创建内部类对象才可以访问
*/
new Student().show() ; //使用匿名对象实例化调用内部类的类成员
System.out.println("外部类Fatch的print()方法");
}
}
public class ClassDemo4 {
public static void main(String[] args) {
Fatch f = new Fatch() ; //实例化外部类对象
f.print() ; //调用外部类的print()方法
}
}

      4)如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。

 class Outer1 {
//外部类
private int i = 10 ;//外部类私有变量
class Inner1{
//内部类
private int i = 20 ;//内部类私有变量
public void show(){
//内部类方法
System.out.println("内部类的变量"+ this.i );//使用this关键字访问内部类成员
System.out.println("外部类的变量"+ Outer1.this.i);//使用外部类名.this.变量名 来访问外部类成员
}
}
public void print(){
new Inner1().show() ; //调用内部类方法
}
}
public class ClassDemo6 {
public static void main(String[] args) {
new Outer1().print() ;  
} }

   

        •注意点:

          »实例化内部类之前必须实例化外部类

          »内部类可以随意访问他的外部类成员,但外部类不可以直接访问内部类的类成员

          »内部类可以被声明为private 或 protected 权限的访问

          »内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象

    •局部内部类(方法内部类)

      内部类不仅可以在类中进行定义,也可以在类的局部位置进行定义,例如在类的方法或者任意的作用域中都可以定义内部类

         1)在外部类的方法中定义一个方法内部类

 class Demo1{
//外部类Demo
final int I = 10 ;//外部类定义的常量
public void show(){ //外部类的show()方法
class Inne{ //方法内部类
int j = 20 ; //方法内部类变量
private void inshow() { //方法内部类中的inshow()方法
System.out.println("外部类常量"+ I );
System.out.println("方法内部类变量"+ j );
}
}
Inne in = new Inne() ; //实例化内部类对象
in.inshow() ; //调用内部类方法
}
}
public class ClassDemo7 {
public static void main(String[] args) {
Demo1 d = new Demo1() ;
d.show() ;
}
}

    注意:如果方法中的参数需要被传递进去,就必须把参数声明成final类型

      •静态内部类

      如果一个内部类被声明为static,此内部类就称为外部类 

       1)静态内部类可以通过(new 外部类名.内部类.内部类方法名) ,来调用静态内部类方法

 class Outer2{
//外部类
private static String str = "张博杰" ;//外部类的静态变量
static class Inner2{
//使用static声明 的静态内部类
public void fun() {
//静态内部类方法
System.out.println("外部类的静态变量"+" "+ str);
}
}
}
public class ClassDemo8 {
public static void main(String[] args) {
new Outer2.Inner2().fun() ;
//静态内部类可以使用new 外部类名.内部类.内部类方法名 ,来调用静态内部类方法
}
}

      

        •匿名内部类

          匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写.使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

         1)匿名内部类的实现

 abstract class A2 {    //抽象类A2
public abstract void eat() ;
}
public class ClassDemo9 {
public static void main(String[] args) {
/**
* 如果A2这个抽象类只用一次,那么就可一使用匿名内部类来实现
*/
A2 a = new A2(){
public void eat(){
System.out.println("我要吃饭");
}
} ;
a.eat() ;
}
}

JAVA基础之内部类的更多相关文章

  1. 黑马程序员——JAVA基础之内部类,匿名内部类

    ------- android培训.java培训.期待与您交流! ---------- 内部类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类). 内部类访问特点: •  内部 ...

  2. Java面向对象之内部类(访问格式)

    一.基础概念 1.内部类是定义在类中的类.A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在. 2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰.(如:publ ...

  3. Java系列之内部类

    今天温习一下 Java 中的内部类,内部类一般有如下几种:静态内部类.成员内部类.匿名内部类和方法内部类,下文中将主要介绍静态内部类和成员内部类,主要内容如下: 概述 静态内部类 成员内部类 匿名内部 ...

  4. Java学习之内部类

    示例1: package com.swust.面向对象; class Person1{ private String username="zhangsan"; public Per ...

  5. Java面向对象之内部类(匿名内部类)

    一.基础概念 匿名内部类:简化书写的内部类.其实匿名内部类就是一个子类对象. 前提:内部类需要继承或者实现外部的类或者接口. 格式:new 父类或者接口(){定义子类的内容} 二.将内部类定义到局部的 ...

  6. [内部类] java笔记之内部类

    1.内部类的分类 2.成员内部类的定义格式 3.一旦使用了内部类,那么生成的class文件长啥样? 其中Body是外部类,Heart是Body的内部类,所以中间有个美元符号$,所以给类进行命名时,不要 ...

  7. Java基础00-内部类23

    1. 内部类 内部类 1.1 内部类概述 代码示例: 1.2 成员内部类 代码示例: 创建一个成员内部类:定义时没有小括号是因为类是没有形参的.在类的成员位置,就是成员内部类了 创建测试类:这里发现不 ...

  8. java之内部类

    最近学了java,对内部类有一点拙见,现在分享一下 所谓内部类(nested classes),即:面向对象程序设计中,可以在一个类的内部定义另一个类. 内部类不是很好理解,但说白了其实也就是一个类中 ...

  9. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

随机推荐

  1. Excel和notepad++加之更换

    1. 替换文本的内容Tab长度,粘合剂Excel有效的变革在列. 2. 替换空行.这里用到回车跟换行.回车\r使光标回到最左,换行\n使光标下移一行. 版权声明:本文博客原创文章,博客,未经同意,不得 ...

  2. iOS画面模糊

    增加  CoreImage.framework  CoreGraphic.framework 等库 在使用时引入:#import <Accelerate/Accelerate.h> ,支持 ...

  3. Android AES加密算法,现在实际上

    昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  4. .NET MVC4 实训记录之三(EntityFramework 与枚举)

    EntityFramework对枚举的引入是从版本5开始的(如果没有记错的话).枚举可以很大程度上提高对程序的可读性.那么在EntityFramework的CodeFirst模式下,如何使用枚举呢?答 ...

  5. des和Rijndael加密

    ------------IV的作用: 为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和一个初始化向 ...

  6. C# 6.0 功能预览

    C# 6.0 功能预览 (一) 一.索引的成员和元素初始化 1.1 原始初始化集合 Dictionary 1.2 键值初始化集合 Dictionary 1.3 运算符 $ 初始化集合 Dictiona ...

  7. Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习

    /*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...

  8. WinForm中使MessageBox实现可以自动关闭功能

    WinForm 下我们可以调用MessageBox.Show 来显示一个消息对话框,提示用户确认等操作.在有些应用中我们需要通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭.然而.Net ...

  9. 2013.7.19 STL库的学习

    STL提供了一组表示容器,迭代器,函数对象和算法的模板. 容器是一个与数组类似的单元,可以存储若干个值.容器是同质的,即存储的值的类型一样. 算法是完成特定任务的处方. 迭代器能够用来遍历容器的对象, ...

  10. 用NPOI实现导入导出csv、xls、xlsx数据功能

    用NPOI实现导入导出csv.xls.xlsx数据功能   直接上代码 首先定义一个接口   如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...