1.嵌套类,内部类

 嵌套类是指被定义在一个类内部的类; 

JAVA的嵌套类有很多种类:1.静态成员类;2.非静态成员类;3.匿名类;4.局部类;其中,除了静态成员类之外,其他的都是内部类,因为静态成员类更像是一个独立的类;

但是静态成员类,是外部类内部的一个成员,静态成员类的访问和其他的静态成员一样:1.通过外部类类名调用;2.如果静态成员类定义为私有,那么只能在外部类内部使用

       JAVA 内部类可以很好的实现隐藏,并且内部类拥有外围类的所有元素的访问权限,可是实现多重继承,并且可以避免修改接口而实现同一个类中两种同名方法的调用。

内部类有以下特点

1.内部类中如果有static的属性,或者方法,那么这个内部类必须是static class;

2.一个内部类static内部类,可以有非static的方法和属性;

2.外部类和内部类

  2.1.外部类访问内部类的属性或方法

可以通过new 对象,外部类可以调用内部类的所有域的属性和方法

public class Outer {
private String name = "张三";
public int age = 10;
private void outerMethod(){
Inner inner = new Inner();
int age = inner.innerAge;
String name = inner.innerName;
inner.innerMethod();
System.out.println("outer method");
} class Inner{
private String innerName = "Inner";
public int innerAge = 14;
public void innerMethod(){
System.out.println("inner start");
System.out.println("inner end");
}
}

  2.2.内部类访问外部类的方法和属性

可以通过 外部类.this.内部类方法(属性)的方式调用所有域的属性和方法

public class Outer {
private String name = "张三";
public int age = 10;
private void outerMethod(){
System.out.println("outer method");
} class Inner{
public void innerMethod(){
System.out.println("inner start");
Outer.this.outerMethod();
String name = Outer.this.name;
int age = Outer.this.age ;
System.out.println("inner end");
}
}
}

  2.3 内部类调用内部类

和外部类调用内部类一样,用 new 对象的形式,可以访问另一个内部类的所有域属性和方法;

3.如何调用用一个类的内部类

一般通过两种方式:第一种:new outer().new inner();第二种:new outer().getInner();通过方法获取;

public class Outer {
public Inner getInner(){
return new Inner();
};
class Inner{
private String innerName = "Inner";
public int innerAge = 14;
}
}
class Test{
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
Outer.Inner inner1 = new Outer().getInner();
}
}

参考资料:《effective java》

Java嵌套类,内部类和外部类的更多相关文章

  1. 【转】C++之内部类(嵌套类)与外部类及友元

    [转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...

  2. C++之内部类(嵌套类)与外部类及友元

    本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 先上代码: class Outer { public: Outer(){m_outer ...

  3. C++嵌套类(内部类与外部类)

    在一个类中定义的类被称为嵌套类,定义嵌套类的类被称为外部类.; //不能访问 mytest::i = 10;//不能访问 } private: class mytest { int i; int j; ...

  4. Java 嵌套类基础详解

    目录 1. 什么是嵌套类? 2. 为什么要使用嵌套类? 3. 嵌套类的类型 4. 静态嵌套类 5. 非静态嵌套类 5.1 成员内部类 5.2 局部内部类 5.3 匿名内部类 6. 嵌套接口 1. 什么 ...

  5. java 编程基础 Class对象 反射 :获取类的构造方法,方法,成员变量,内部类,外部类,父类,实现的接口,修饰符等...

    类 Class  每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类. 我们在Java中获取Class对象一般有三种方式: (1), 使用C ...

  6. JAVA 嵌套类和内部类

    一.什么是嵌套类及内部类?  可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它有两种类型:  静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类, ...

  7. (十二)java嵌套类和内部类

    嵌套类和内部类:在一个类里边定义的类叫做嵌套类,其中没有static修饰的嵌套类是我们通常说的内部类,而被static修饰的嵌套类不常用.有的地方没有嵌套类和内部类的区分,直接是嵌套类就称作内部类,没 ...

  8. java内部类 和外部类的区别

    java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...

  9. Java内部类与外部类的那些事

    昨天去笔试的时候遇到了Java的内部类的创建方式与访问权限的问题,我不懂,没写,故今天起来特意去试验一下,就有了这篇总结性的文章. Java中的内部类又分为非静态内部类(匿名内部类也是非静态的内部类) ...

随机推荐

  1. java实现第四届蓝桥杯买不到的数目

    买不到的数目 题目描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 ...

  2. Flutter upgrade更新版本引发的无法启动调试APP的错误 target:kernel_snapshot failed”

    前言 我的主机上的Flutter 本地的分支是在 beta,因为去年想尝鲜Flutter Web,所以一直没切回来stable分支. 早上打开VSCode,右下角弹出了Flutter upgrade的 ...

  3. 头条面试居然跟我扯了半小时的Semaphore

    一个长头发.穿着清爽的小姐姐,拿着一个崭新的Mac笔记本向我走来,看着来势汹汹,我心想着肯定是技术大佬吧!但是我也是一个才华横溢的人,稳住我们能赢. 面试官:看你简历上有写熟悉并发编程,Semapho ...

  4. 创建使用mysql表

    1.展示所有数据库 show databases;2.选中数据库 use database_name(;)3.创建数据库 create database database_name;4.使用2选中数据 ...

  5. 这才是Android设置界面的正确做法👌👌👌

    话不多说,先上效果图 本文参考简书博客:<这才是Android设置界面的正确做法>一文写成,在其基础上删改并增加了一些内容.建议新窗口打开原文,在本文讲述不清楚的地方参考原文去寻找答案. ...

  6. FFT,NTT入门

    目录 -1.前置知识 复数 单位根 单位根反演 0.卷积 1.FFT -1.前置知识 复数   复数单位\(i\):定义为\(i^2=-1\).\(i\)可以直接参与运算.   复数:形如\(z=a+ ...

  7. free【分层图最短路】

    free 传送门   来源: 牛客网 题目描述 Your are given an undirect connected graph.Every edge has a cost to pass.You ...

  8. Install Centos7 on VirtualBox in mac

    Step 1:准备虚拟机及镜像 下载合适的Virtual Box版本 官方下载链接:https://www.virtualbox.org/wiki/Downloads 这里选择的版本是:https:/ ...

  9. (三)log4j常用配置

    控制台(console) log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = ...

  10. (六)POI-操作Excel的poi的字体设置

    原文链接:https://blog.csdn.net/class157/article/details/92817286 package com.java.poi; import org.apache ...