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. restrict

    restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其 ...

  2. leetcode第19题--Remove Nth Node From End of List

    Problem: Given a linked list, remove the nth node from the end of list and return its head. For exam ...

  3. 安装WindowsXP操作系统(Ghost版) - 初学者系列 - 学习者系列文章

    Windows XP的Ghost版是经典的版本.因为XP相对较小些,所以用Ghost起来速度比较快.如果Ghost那个Windows 7之类的,速度就慢了.Windows 7建议还是安装比较快.下面简 ...

  4. 图解:SQL Server SSIS包和job的部署攻略

    原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...

  5. 华丽的NHibernate

    华丽的NHibernate http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 华丽的NHibernate NHibern ...

  6. visual c++ 动态链接库调用总结

    由于每次使用动态链接库的时候都要重新去查资料,查调用方式,有些烦躁,本人抽点时间在此做个总结,希望可以对需要的朋友有所帮助. 1,显式加载方式加载动态链接库 简单易懂,随掉随用 (1)         ...

  7. 利用Matlab生成一个网格化的三维三轴椭球面(生成直角坐标)

    代码很简单,a,b,c分别为椭球的三轴轴长,a=b=c时得到的是三维球面,a=b!=c时得到的是三维椭球面,a!=b且a!=c且b!=c时得到的是三维旋转椭球面 %生成一个笛卡尔坐标系下三轴椭球表面的 ...

  8. Euclid Problem - PC110703

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10104.html 原创:Eucl ...

  9. printf code

    printf背后的故事 2014-01-14 21:54 by Florian, 41 阅读, 0 评论, 收藏, 编辑 printf背后的故事 说起编程语言,C语言大家再熟悉不过.说起最简单的代码, ...

  10. twobin博客样式

    twobin博客样式—“蓝白之风”   自暑假以来,囫囵吞枣一般蒙头栽入前端自学中,且不说是否窥探其道,却不自觉中提高了对网页版面设计的要求,乃至挑剔.一个设计清爽美观的网页能让读者心旷神怡,甚至没有 ...