java 内部类

 

/**
 * <p>
 * 内部类说明<br/>
 *
 * @className Outer.java<br/>
 *            类是用于描述事物的,内部类可以直接访问外部类的成员
 */
public class Outer {
 private int x = 3;
 private static int y = 4;

 class Inner {
  private int z = 0;

  void function() {
   System.out.println("Outer:" + x);// System.out.println("Outer:"+Outer.this.x);
  }
 }

 static class Inner2 {
  void function() {
   System.out.println(y);
  }
 }

 private class Inner3 { // 内部类可以用private修饰(类可以被private修饰),外部调用,只能通过提供方法供外部访问
  int m = 0;

  void function() {
   System.out.println("Outer:" + m);// System.out.println("Outer:"+Outer.this.x);
  }
 }
 //提供外部访问Inner3的方法
 public void showInner3(){
  Inner3 i = new Inner3();
  i.function();
 }

 public static void main(String[] args) {
  Inner i = new Outer().new Inner();
  i.function();
  System.out.println(i.z);
  // 外部其他类中访问内部类
  Outer.Inner in = new Outer().new Inner();
  in.function();

  Inner2 inn = new Outer.Inner2();// 内部类被static修饰
  inn.function();
 }
}


/**<p>匿名内部类<br/>
 * @className Outer2.java<br/>
 */
public class Outer2{
 public static void main(String[] args) {
  OuterTz o = new OuterTz();
  o.method();
 }
}
class OuterT {
 private int  x = 3;
 
 void mehtod(){
  final int x = 4;
  class Inner{//内部类可在任意位置,此在局部
   void function(){
    System.out.println("Outer:"+x);//System.out.println("Outer:"+Outer.this.x);
   }
  }
  Inner i = new Inner();
  i.function();
 }
 
}

class OuterTs {
 private int  x = 3;
 
 void mehtod(){
  final int x = 4;
  class Inner{//局部内部类访问局部成员变量,要加final修饰
   void function(){
    System.out.println("Outer:"+x);//System.out.println("Outer:"+Outer.this.x);
   }
  }
  Inner i = new Inner();
  i.function();
 }
 
}
//抽象类(匿名内部类要继承抽象类或实现接口,一般有一个两个的抽象方法)
abstract class AbsDemo{
 abstract void show();
}

class OuterTz{
 void method(){
  class Inner extends AbsDemo{
   void show() {
    System.out.println("复写父类的方法");
   }
  }
  Inner i = new Inner();
  i.show();
 }
}

class OuterTz1{
 void method(){
  /*
  class Inner extends AbsDemo{
   void show() {
    System.out.println("复写父类的方法");
   }
  }
  Inner i = new Inner();
  i.show();
  */
  new AbsDemo(){  //这就是匿名内部类:匿名子类,
   void show() {
    System.out.println("复写父类的方法");
   }
   void function(){
    System.out.println("多态方法");
   }
  };
  AbsDemo ab = new AbsDemo(){  //这就是匿名内部类:匿名子类,可以简写代码
   void show() {
    System.out.println("复写父类的方法");
   }
   void function(){
    System.out.println("多态方法");
   }
  };
  ab.show();
  //ab.funcion();编译出错
  
  new AbsDemo(){  //这就是匿名内部类:匿名子类,
   void show() {
    System.out.println("复写父类的方法");
   }
   void function(){
    System.out.println("多态方法");
   }
  }.show();
  
  new AbsDemo(){  //这就是匿名内部类:匿名子类,
   void show() {
    System.out.println("复写父类的方法");
   }
   void function(){
    System.out.println("多态方法");
   }
  }.function();
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值