1.静态内部类
----如果一个类包含一个完整的成分,如汽车类中的发动机类
---特点,使用与欧同类是一样的,类有的成分都有,只是位置在别人里面而已
---可以直接发囊文外部类的静态成员,不能直接访问外部类的实例成员
- package com.yuyang.d3_innerclass;
-
- /**
- * 外部类
- */
- public class Outer {
- public static int a=100;
- private String hobby;
- /*
- 静态成员内部类
- */
- public static class Inner{
- private String name;
- private int age;
- public static String SchoolName;
-
- public Inner(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public Inner() {
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- // Outer o=new Outer();
- public void show(){
- System.out.println(a);
- System.out.println(name);
- // System.out.println(o.hobby);
- }
- }
- }
如何创建对象
外部类.内部类=new 外部类.内部类构造器
- package com.yuyang.d3_innerclass;
-
- public class Test {
- Outer.Inner i=new Outer.Inner("小胖鱼",19);
- }
2.成员内部类(实例内部类)
---无static修饰属于外部类的对象
--- 可以直接访问外部类的静态成员
----可以直接访问外部类对象的实例成员
- package com.yuyang.d3_innerclass;
-
- /**
- * 外部类
- */
- public class Outer {
- // public static int a=100;
- // private String hobby;
-
- public class Inner{
- private String name;
- private int age;
- // public static int a;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- public void show(){
- System.out.println(name);
- }
- }
- }
如何创建对象
外部类.内部类=new 外部类构造器.new 内部类构造器
- package com.yuyang.d3_innerclass;
-
- public class Test {
- public static void main(String[] args) {
- Outer.Inner n = new Outer().new Inner();
-
- }
- }
3.局部内部类(·了解即可)
局部内部类放在方法,代码块,构造器等执行体中
局部内部类的文件名:外部类$内部类.class
略-------------------------------
4.匿名内部类(重点)
----本质上是没有名字的局部内部类,定义在方法中,代码块中,等。
---作用是方便创建子类对象,最终目的是为了简化代码的编写。
格式:
new 类|抽象类名|或者接口名(){
重写方法;
}
---特点总结
---匿名内部类没有一个名字的内部类
---匿名内部类写出来就会产生一个内部类的对象。
---匿名内部类的对象类型相当于当前new的那个子类的子类类型。
--能产生class文件
- package com.yuyang.d4_inteerclass_anonymous;
-
- public class Test {
- public static void main(String[] args) {
- Animal a=new Animal() {
- @Override
- public void run() {
- System.out.println("老虎跑的贼快");
-
- }
- };
-
-
- }
- }
-
- abstract class Animal{
- public abstract void run();
- }