java基础-内部类、代码块

列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:------------------------------------------------------------------------
主程序------------------------

子类----------------------------

父类---------------------------------------

发布了143 篇原创文章 · 获赞 41 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/qq_29257691/article/details/102624072