为了账号安全,请及时绑定邮箱和手机立即绑定

匿名对象

标签:
Java


匿名对象

顾名思义就是没有名字的对象,这种对象创建直接new 就可以了,具体的实例如下:

l  Person类

package cn.itcast.AnonymousObject; public class Person {   //定义一个方法,用于对象的调用   public static void eat(){      System.out.println("人会吃饭");   }}


l  测试类

package cn.itcast.AnonymousObject; public class Test {   public static void main(String[] args) {      //创建有名对象      Person p = new Person();      p.eat();      //创建匿名对象      new Person().eat();      //调用方法,作为参数进行传递      method(new Person());      //调用method空参方法,用Person类型的参数进行接收      Person p1 = method();      p1.eat();   }   //对象创建写进方法中,进行调用   public static Person method(){//    Person p = new Person();//    return p;      return new Person();         }   //匿名对象可以作为参数进行传递   public static void method(Person p){      p.eat();   }}


匿名对象的特点:

1. 有名对象可以用引用变量随时进行调用,而匿名对象只能调用一次,还想调用,继续创建匿名对象进行调用,这样做浪费资源,不建议多次调用时使用。

2. 匿名对象可以当做参数进行传递调用。

内部类

顾名思义就是类内部包含的类,就是内部类。一个事物内部还包含更深层次的事物,这个事物就是内部类,比如描述汽车类,它的内部还有发动机类,发动机类就是内部类。

内部类的定义格式:

         外部类.内部类 变量名 = new 外部类().new 内部类();

         变量名.方法名();

外部类内部类成员调用规则:内部类调用外部类中的成员直接调用即可,外部类调用内部类中的成员需要创建外部类内部类的对象(如上内部类的创建格式)。

内部类的定义如下代码演示:

package cn.itcast.NestedClass内部类;//外部类public class Outer {   //定义一个成员变量   private int a = 1;   //内部类,定义在外部类的成员位置,可以加pubic private static   class Inner{      //定义一个方法      public void show(){         //内部类可以使用外部类中的成员         System.out.println("内部类方法"+a);      }   }}


l  测试类

package cn.itcast.NestedClass内部类; public class Test {   public static void main(String[] args) {      //创建对象,调用内部类方法      Outer.Inner n = new Outer().new Inner();      n.show();   }}

运行结果:                                        

内部类中同名成员变量的调用具体演示如下:

package cn.itcast.NestedClass内部类成员变量;/* * 外部类、内部类成员变量的调用 */public class Outer {   //外部类成员变量   int i = 1;   //内部类   class Inner{      //内部类成员变量      int i = 2;      public void show(){         //局部变量         int i = 3;         //调用方法内局部变量         System.out.println("方法内局部变量i的值:"+i);         //调用内部类i的值         System.out.println("内部类中i的值:"+this.i);         //调用外部类中i的值         System.out.println("外部类中i的值:"+Outer.this.i);      }   }}


l  测试类

package cn.itcast.NestedClass内部类成员变量;/* * 测试类 */public class Test {   public static void main(String[] args) {      //创建内部类的对象      Outer.Inner in = new Outer().new Inner();      in.show();   }}

运行结果:

局部内部类:定义在外部类方法中的内部类,具体代码演示如下:

package cn.itcast.NestedClass局部内部类; public class Outer {   //外部类的方法   public void out(){      //局部内部类,定义在外部类方法中成员位置的内部类      class Inner{         //内部类中的方法         public void inner(){            System.out.println("内部类中的方法");         }      }         //创建内部类的对象         Inner in = new Inner();         in.inner();   }}


l  测试类

package cn.itcast.NestedClass局部内部类; public class Test {   public static void main(String[] args) {      //创建外部类对象。调用内部类方法      Outer o = new Outer();      o.out();   }}


运行结果:

注意:局部内部类中的方法调用需要在外部类的方法中创建内部类的对象,然后再在主方法中创建外部类的对象才能调用局部内部类中的方法。

匿名内部类:就是将实现接口的实现类,重写接口方法,创建实现类的对象,调用实现类的方法这些步骤简化。

定义匿名内部类的格式:

new 接口类的类名(){

         重写后的方法

}.方法名();

具体的代码演示如下:

package cn.itcast.NestedClass匿名内部类; //接口类public interface Inner {   public abstract void smoking();}/*   实现接口的实现类   public class Inter implements Inner{      //重写抽象方法      public void smoking(){            }   }   //创建实现类的对象   Inner x = new Inner();   x.smoking();   Inner i = new Inter();   i.smoking(); */


l  测试类

package cn.itcast.NestedClass匿名内部类; public class Test {   public static void main(String[] args) {      //匿名内部类:将定义实现类,重写抽象方法,创建实现类的对象进行简化      new Inner(){         public void smoking(){            System.out.println("人在抽烟");         }      }.smoking();   }}


代码演示二:

package cn.itcast.NestedClass匿名内部类;//抽象类public abstract class Animal {   public abstract void show();   public abstract void sleep();}


l  测试类

package cn.itcast.NestedClass匿名内部类; public class Test2 {   public static void main(String[] args) {      //创建匿名内部类,这种方法只能调用一次方法,不能同时调用两次方法      /*new Animal(){         //重写抽象方法         public void show(){            System.out.println("吃饭");         }         public void sleep(){            System.out.println("睡觉");         }      }.show();*/      Animal a = new Animal(){         //重写抽象方法         public void show(){            System.out.println("吃饭");         }         public void sleep(){            System.out.println("睡觉");         }      };      a.show();      a.sleep();   }}


 


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消