列1:------------------------------------------------------------------------
主程序------------------------
public class Test { public static void main(String[] args) { /* * 调用外部类中的内部类的方法inner() * 依靠外部类对象,找到内部类,通过内部类对象,调用内部类的方法 * 格式: * 外部类名.内部类名 变量 = new 外部类对象().new 内部类对象(); * 变量.内部类方法() */ Outer.Inner in = new Outer().new Inner(); in.inner(); } }
子类----------------------------
/* * 内部类的定义 * 将内部类,定义在了外部的成员位置 * 类名Outer,内部类名Inner * * 成员内部类,可以使用成员修饰符,public static .... * 也是个类,可以继承,可以实现接口 * * 调用规则: 内部类,可以使用外部类成员,包括私有 * 外部类要使用内部类的成员,必须建立内部类对象 */ public class Outer { private int a = 1; //外部类成员位置,定义内部类 class Inner{ public void inner(){ System.out.println("内部类方法inner "+a); } } }
列2:------------------------------------------------------------------------
主程序------------------------
public class Test { public static void main(String[] args) { //调用局部内部类的方法inner new Outer().out(); } }
子类----------------------------
/* * 局部内部类 * 将一个类,定义在方法中 */ public class Outer { public void out(){ class Inner { public void inner(){ System.out.println("局部内部类方法"); } } Inner in = new Inner(); in.inner(); } }
列3:------------------------------------------------------------------------
主程序------------------------
public class Test { public static void main(String[] args) { //使用匿名内部类 /* * 定义实现类,重写方法,创建实现类对象,一步搞定 * 格式: * new 接口或者父类(){ * 重写抽象方法 * }; * 从 new开始,到分号结束 * 创建了接口的实现类的对象 */ new Smoking(){ public void smoking(){ System.out.println("人在吸烟"); } }.smoking(); new Smoking(){ @Override public void smoking() { System.out.println("ceshi "); } }.smoking(); } }
子类----------------------------
public interface Smoking { public abstract void smoking(); } /* * 实现类,实现接口 重写接口抽象方法,创建实现类对象 * class XXX implements Smoking{ * public void smoking(){ * * } * } * XXX x = new XXX(); * x.smoking(); * Smoking s = new XXX(); * s.smoking(); * * 匿名内部类,简化问题: 定义实现类,重写方法,建立实现类对象,合为一步完成 */
列4:------------------------------------------------------------------------
主程序------------------------
/* * new Animal(){ public void eat(){ System.out.println("在吃饭"); } public void sleep(){ System.out.println("在睡觉"); } }; 以上代码,就是Animal的子类的对象 多态性, 父类引用 = 子类的对象 */ public class Test2 { public static void main(String[] args) { Animal a= new Animal(){ public void eat(){ System.out.println("在吃饭"); } public void sleep(){ System.out.println("在睡觉"); } }; a.eat(); a.sleep(); } }
子类----------------------------
public abstract class Animal { public abstract void eat(); public abstract void sleep(); }
列5:------------------------------------------------------------------------
主程序------------------------
public class Test { public static void main(String[] args) { new Person("张三",20); new Person("张三2",220); } }
子类----------------------------
/* * 静态代码块, 只执行一次 * 构造代码块,new一次,就执行一次,优先于构造方法 * 构造方法, new 一次,就执行一次 */ public class Person { private String name; private int age; public Person(String name,int age){ this.age = age; this.name = name; System.out.println("我是构造方法"); } //构造代码块 { System.out.println("我是构造代码块"); } //静态代码块 static{ System.out.println("我是静态代码块"); } }
列2:------------------------------------------------------------------------
主程序------------------------
子类----------------------------
父类---------------------------------------