java学习(2)

Java支持在一个类中声明看另一个类,这样的类称左内部类。

1.内部类:

China.java
 1 public class China {

 2     final String song="义勇军进行曲";

 3     private Beijing beijing;

 4     China(){

 5         beijing=new Beijing();

 6     }

 7     //Beijing beijing=new Beijing();

 8     public Beijing getBeijing(){

 9         return beijing;

10     }

11     String getSong(){

12         return song;

13     }

14     class Beijing{                //内部类的声明

15         String name="北京";

16         void speak(){

17             System.out.println("我们是"+name+"\n我们的国歌是:"+getSong());

18         }

19     }

20 }
main
 1 public class Example6_1 {

 2 

 3     /**

 4      * @param args

 5      */

 6     public static void main(String[] args) {

 7         China china= new China();

 8         china.getBeijing().speak();

 9 

10     }

11 

12 }
结果
我们是北京

我们的国歌是:义勇军进行曲

 

2.匿名类:Java允许直接使用一个类的子类的类体创建一个子类的对象,也就是说,创建子类对象的时候,除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉声明后的类体,称作“匿名类”。

 2.1和类有关的匿名类:

和类有关的匿名类
 1 abstract class J_Class{

 2     int m_data;

 3     

 4     public J_Class(int i){

 5         m_data=i;

 6     }

 7     

 8     public abstract void mb_method();

 9 }

10 

11 public class Example6_2 {

12 

13     /**

14      * @param args

15      */

16     public static void main(String[] args) {

17         J_Class b=new J_Class(5){

18             public void mb_method(){

19                 System.out.println("m_data="+m_data);

20             }

21         };        //父类型为类J_Class的匿名内部类结束

22         b.mb_method();

23     }

24 

25 }
和类有关的匿名类 例2
 1 abstract class Speak{

 2     public abstract void speakHello();

 3 }

 4 

 5 class Student{

 6     void f(Speak sp){

 7         sp.speakHello();

 8     }

 9 }

10 

11 public class Example6_3 {

12 

13     /**

14      * @param args

15      */

16     public static void main(String[] args) {

17         Speak speak=new Speak(){                //匿名内部类

18              public void speakHello(){

19                 System.out.println("大家好,祝工作顺利!");

20             }

21         };

22         speak.speakHello();

23         Student st=new Student();

24         st.f(new Speak(){                        //匿名内部类

25             public void speakHello(){

26                 System.out.println("I am a student,how are you?");

27             }

28         });

29     }

30 

31 }

  2.2和接口有关的匿名类

和接口有关的匿名类
 1 //与接口有关的匿名类

 2 interface Cubic{

 3     double getCubic(double x);

 4 }

 5 

 6 class A{

 7     void f(Cubic cubic){

 8         double result=cubic.getCubic(3);

 9         System.out.println("result="+result);

10     }

11 }

12 

13 public class Example6_4 {

14 

15     /**

16      * @param args

17      */

18     public static void main(String[] args) {

19         Cubic cu= new Cubic(){            //匿名类的声明

20             public double getCubic(double x){

21                 return x*x*x;

22             }

23         };

24         double m=cu.getCubic(5);

25         System.out.println("m="+m);                

26         A a=new A();

27         a.f(new Cubic(){            //实现接口的匿名类的类体

28             public double getCubic(double x){

29                 return x*x*x;

30             }

31         });

32     }

33 

34 }
结果
m=125.0

result=27.0

你可能感兴趣的:(Java学习)