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();
}