文章目录

  • 1.内部类与静态内部类的区别
  • 2.举例说明
    • 2.1 内部类
    • 2.2 静态内部类

1.内部类与静态内部类的区别

  1. 静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。 但是可以直接访问静态变量,调用静态的方法。

  2. 普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。

  3. 如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。

  4. 如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个内部类的对象作为一个属性,外部类可以通过属性调用普通内部类的方法或者访问普通内部类的属性。

  5. 如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。

2.举例说明

2.1 内部类

public class Father {private String name;public Father(String name) {this.name = name;}public void say(String dogName) {Dog dog = new Dog(dogName);System.out.println("i am " + name + ", i have a dog " + dog.dogName);}public void feed() {System.out.println("feed in Father");}public  class Dog {private String dogName;public Dog(String dogName) {this.dogName = dogName;}public void bark() {feed();System.out.println("i am " + dogName + ", i am belong to " + name);}public String getDogName() {return dogName;}}
}

对于第2条,普通内部类作为成员,可以直接访问外部类的变量,调用其方法。可以看到Dog内中的bark()方法可以直接使用变量name,可以调用feed方法。

对于第3条,我们在Father类中,想要使用Dog类中的属性dogName,必须先实例化一个dog对象,然后通过该对象调用方法,获取变量。

对于第4条,那先创建一个外部类

public class YYTest {public static void main(String[] args)  {final Father zhangsan = new Father("zhangsan");Father.Dog gg = zhangsan.new Dog("GG");gg.getDogName();gg.bark();}
}

可以看到,通过对象zhangsan.new Dog()方法实例化一个内部类对象gg,通过该内部类对象可以访问变量,调用方法。

2.2 静态内部类

public class Father {private String name;private static String sex = "female";public Father(String name) {this.name = name;}public void say(String dogName) {Dog dog = new Dog(dogName);System.out.println("i am " + name + ", i have a dog " + dog.dogName);}public void feed() {System.out.println("feed in Father");}public static class Dog {private String dogName;public Dog(String dogName) {this.dogName = dogName;}public void bark() {Father lisi = new Father("lisi");lisi.feed();System.out.println("i am " + dogName + ", i am belong to " + lisi.name + ", his sex is " + sex);}public String getDogName() {return dogName;}}
}

对于第1点,可以看到bark()方法中想要使用name属性,需要先实例化Father对象,通过对象调用。而访问静态变量则不需要通过实例化对象,可以直接访问。

对于第1点

public class YYTest {public static void main(String[] args)  {Father.Dog hh = new Father.Dog("HH");hh.bark();}
}

直接实例化静态内部类即可。注意实例化方法即可。
静态类只能是内部的。

内部类与静态内部类区别及举例相关推荐

  1. Java面试题—内部类和静态内部类的区别

    内部类和静态内部类的区别 内部类: 1.内部类中的变量和方法不能声明为静态的. 2.内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B(). 3.内部类可以引用外部类的 ...

  2. 静态属性_Java面试题—内部类和静态内部类的区别

    内部类和静态内部类的区别 内部类: 1.内部类中的变量和方法不能声明为静态的. 2.内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B(). 3.内部类可以引用外部类的 ...

  3. java 静态内部类 内部类_Java中内部类和静态内部类的区别

    内部类和静态内部类 示例 public class OuterClass { private int numPrivate = 1; public int numPublic = 2; public ...

  4. Java内部类与静态内部类

    http://hi.baidu.com/zhumulangma/item/bcd478c140427b2cef466532 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明pub ...

  5. java 内部类_java的内部类和静态内部类(嵌套类)

    背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类.在codeReview的时候稍微和大家聊了一下.尤其是Static 修饰类和修饰对象和变量不一样呢 ...

  6. Java 内部类(本地内部类、实例内部类、静态内部类、匿名内部类)

    定义在 类内部的类,叫做内部类 内部类共有:本地内部类(定义在方法里面的类).实例内部类.静态内部类.匿名内部类 目录 1. 实例内部类 2. 静态内部类 3. 匿名内部类 ------ 分 --- ...

  7. java静态内部类有什么好处6_java的内部类和静态内部类(嵌套类)

    背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类.在codeReview的时候稍微和大家聊了一下.尤其是Static 修饰类和修饰对象和变量不一样呢 ...

  8. Java 内部类、局部内部类、静态内部类使用

    1.上代码: //局部内部类.静态内部类.匿名类接口仅仅解决了多继承的部分问题,内部类有效实现了多重继承package ClassN1;public final class InnerClass {p ...

  9. Java内部类介绍 - 静态内部类和成员内部类

    文章目录 内部类 内部类概述 静态内部类 成员内部类 内部类 内部类概述 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主). // 外部的People类可以理解成宿 ...

最新文章

  1. python上海培训哪里比较好-python培训机构上海哪里好?
  2. 如何下载百度文库的资料?
  3. java报错空指针异常_夯实基础:认识一下这10 个深恶痛绝的 Java 异常
  4. es 全量同步mysql_使用canal将mysql同步到es中
  5. 5G 来了,我们可以做什么?
  6. Vmware下安装CentOS6的特别注意,一定要在虚拟机上电时候按DEL,选择操作系统启动方式...
  7. mysql 外键约束_MySQL之外键约束(FOREIGN KEY)
  8. Vue项目部署到服务器上路由无法访问的问题
  9. 判断linux下的网络服务是否正常启动
  10. Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
  11. BZOJ 3689 异或之
  12. python实现超级玛丽小游戏(动图演示+源码分享)
  13. 到底什么是嵌入式?什么是单片机?
  14. 怎么让上下两排对齐_Word文档如何让让上下两排对齐 - 卡饭网
  15. MYSQL中概念模型的基本概念_数据库基本概念
  16. [ANSYS]重力场考虑与否讨论
  17. IPv6技术精要--第17章双栈和隧道
  18. oracle 多表导出,oracle多表导出dmp
  19. ARM NEON - RGB转灰度的实现 (DSP Factory学习总结)
  20. x722网卡支持百兆吗_用200M宽带,电脑网卡却只有百兆?这样可以解决!

热门文章

  1. redis:redis-cli不是内部或外部命令
  2. naxx Demo1_ZZQ_01.java
  3. 如何在Mac上快速签署PDF,来看这篇超全面分析!
  4. 免费的产品项目研究辅助工具_产品经理很好的助手工具软件
  5. Java中的静态类和非静态类
  6. 本地社交的灰色地带,监管势在必行
  7. Efuse--电编程熔丝
  8. 电脑常识-远程桌面显示鼠标
  9. oppo手机云服务器关闭链接,OPPO云服务使用要知道,可以让你的手机瞬间释放内存空间...
  10. 联通GPON/4+1+WiFi(2.4G)TEWA-800G配置桥接模式