- 首先定义一个抽象类Computer
public abstract class Computer { //抽象类是不可以常见对象的 int a=1; public abstract void online(); public abstract void watchTV();}
- 入口:Test 注意:抽象类有构造方法但是接口是没有构造方法的,所以下面代码中new 后面加的是匿名抽象类
public class Test { public static void main(String[] args) {// 生成的二进制字节码文件(.class文件)名称为:Outer.class文件 //创建内部类对象的第一种写法:通过这种方式常见出来的外部类对象没有引用,我们不能引用他的对象和方法// 匿名: //下面的这种创建内部类对象的方法new Outer()并没有被引用,所以他是一个匿名的对象 Outer.Inner inner = new Outer().new Inner(); inner.b(); System.out.println("------------------------------------------"); //创建内部类的第二种写法:先创建外部类对象,然后由外部类的对象去创建内部类的对象 Outer outer = new Outer();//创建了外部对象 Outer.Inner inner1 = outer.new Inner();//创建内部的对象 inner1.b(); /**匿名的概念: *匿名内部类:这下面其实是有一个类的存在的,但是我们看不见类的任何影子 *在编译后的目录中多出来一个Test$1.class这是一个内部类名字是:Test$1.class *相当于创建出来一个匿名的内部类(这个匿名内部类相当于这个抽象类的子类)然后继承了抽象类,并实现了他的抽象方法 * * 这个匿名内部类是一次性的 */ Computer PC = new Computer() { @Override public void online() { System.out.println("匿名内部类中的方法 上网"); } @Override public void watchTV() { System.out.println("匿名内部类中的方法 看电视"); } };//注意最后的分号不能少 System.out.println("抽象类中的变量 a"+PC.a); PC.online(); PC.watchTV(); /** * 匿名内部类的创建形式: * * new ---抽象类或者接口名--()---{}实现抽象方法的地方----分号 * * */ Standard a=new Standard() { @Override public void supply() { System.out.println("我的电脑"); } @Override public void reticle() { } @Override public void usb() { } }; a.supply(); /** * 讲继承的时候说过:没有父类就没有子类 * 对于内部类也一样:没有外部类的对象就不能创建一个内部类的对象 * 创建内部类对象的方法:通过外部类的对象去创建内部类的对象 */ }}