java 成员内部类 局部内部类,匿名内部类

一.成员内部类

比如,一个人,他有头发 四肢,而都需要心脏给她供血。心脏就可以做这个成员内部类,他可以使用类中的所有属性。

package书籍练习;

class Outer{

  Stringname;

  int x=2;

  private class Inner{

     Stringname="内部类";

     int x=5;

 

扫描二维码关注公众号,回复: 12470157 查看本文章

     public void print(){

     System.out.println(name);

  }

}

  public void method(){

     Innerinner=new Inner();

     inner.print();

  }

}

public classa1 {

  public static void main(String[] args){

     Outerouter=new Outer();

     outer.method();

  }

}

在成员变量和内部类的变量同名时,默认的是访问内部类中的变量

而上面还有另外两种调用成员内部类方法

1.直接在主函数中调用内部类    

Outer.Inner.inner=newOuter().new Inner();

2.也是在主函数中直接调用,但是她只能调用静态类,而也只能调用类里面静态的属性。

Outer.Inner inner=newOuter.Inner()

二注意:

1.如果想访问同名的外部类成员,可用System.out.println(Outter.this.name);

2.如果是私有的成员内部类,只能在公共的方法中提供给其他类访问,不能在其他类中建立对象

 

二.局部内部类

在一个类中的方法中,再定义一个类

调用方法:

1.直接在该内部类的下面,也就是方法的里面建立一个内部类对象,

package书籍练习;

class Outer{

  Stringname;

  int x=2;

  public void method(){

     class Inner{

     Stringname="内部类";

     int x=5;

   public void print(){

       System.out.println(Outer.this.name);

     }

  }

  Innerinner=new Inner();

  inner.print();

     }

  }

public classa1 {

  public static void main(String[] args){

     Outerouter=new Outer();

     outer.method();

  }

}

2.其他的跟成员内部类类似,但是如果想要访问局部内部类的成员,它一定为final型。

三。匿名局部类

直接创建对象不需要引用对象名,但它的前提是必须有继承或者实现的关系,才能使用匿名内部类

什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:

·只用到类的一个实例。

·类在定义后马上用到。

·类非常小(SUN推荐是在4行代码以下)

·给类命名并不会导致你的代码更容易被理解。

在使用匿名内部类时,要记住以下几个原则:

·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

有两种表现形式:

package书籍练习;

abstract classAnimal1{

  abstract void eat();

  abstract void sleep();

}

class Outter{

  public void print(){

     class Fish extends Animal1{

 

       @Override

       void eat() {

       System.out.println("想吃啥");

       }

       @Override

       void sleep() {

       System.out.println("睡觉");

       }

     }

     Fishfish=new Fish();

     fish.eat();

     fish.sleep();

  }

}

public classa1{

  public static void main(String[] args){

     Outteroutter=new Outter();

     outter.print();

  }

}

这种方式,可以建立多个对象,调用多个多个方法。

2. package 书籍练习;

class Outter{

  public void print(){

     new Animal1(){

 

 

       @Override

       void eat() {

       System.out.println("想吃啥");

       }

 

 

       @Override

       void sleep() {

       System.out.println("睡觉");

       }

     }.eat();;

  }

}

public classa1 {

  public static void main(String[] args){

     Outteroutter=new Outter();

     outter.print();

  }

}

该方法只能调用一次,建立一个对象,调用一个方法

 四。应用例子

1). 应用程序框架(applicationframeword)就是被设计用来解决某类特定问题的一个类或一组类。

2).要运行某个应用程序框架,通常是继承一个或多个类,并覆盖某个方法。

3).控制框架是一类特殊的应用程序框架,它用来解决响应事件的需求。

4).主要用来响应事件的系统被称作事件驱动系统


猜你喜欢

转载自blog.csdn.net/qq_39156616/article/details/73188024