• JavaSE学习总结第10天_面向对象5


    10.01 运动员和教练案例分析

    教练和运动员案例:运动员分乒乓球运动员和篮球运动员,教练分乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。

    分析:

    10.02 运动员和教练案例实现

    复制代码
      1 //定义一个说英语的接口
      2 interface SpeakEnglish 
      3 {
      4     //说英语
      5     public abstract void speak();
      6 }
      7 
      8 //定义人的抽象类
      9 abstract class Person 
     10 {
     11     private String name;
     12     private int age;
     13     
     14     public Person() {}
     15     
     16     public Person(String name,int age) 
     17     {
     18         this.name = name;
     19         this.age = age;
     20     }
     21     
     22     public String getName() 
     23     {
     24         return name;
     25     }
     26     
     27     public void setName(String name) 
     28     {
     29         this.name = name;
     30     }
     31     
     32     public int getAge() 
     33     {
     34         return age;
     35     }
     36     
     37     public void setAge(int age) 
     38     {
     39         this.age = age;
     40     }
     41     
     42     //睡觉
     43     public void sleep() 
     44     {
     45         System.out.println("人都是要睡觉的");
     46     }
     47     
     48     //吃饭
     49     public abstract void eat();
     50 }
     51 
     52 //定义运动员抽象类
     53 abstract class Player extends Person 
     54 {
     55     public Player() {}
     56     
     57     public Player(String name,int age) 
     58     {
     59         super(name,age);
     60     }
     61     
     62     //学习
     63     public abstract void study();
     64 }
     65 
     66 //定义教练抽象类
     67 abstract class Coach extends Person 
     68 {
     69     public Coach() {}
     70     
     71     public Coach(String name,int age) 
     72     {
     73         super(name,age);
     74     }
     75     
     76     //教学
     77     public abstract void teach();
     78 }
     79 
     80 //定义乒乓球运动员具体类
     81 class PingPangPlayer extends Player implements SpeakEnglish 
     82 {
     83     public PingPangPlayer(){}
     84     
     85     public PingPangPlayer(String name,int age) 
     86     {
     87         super(name,age);
     88     }
     89     
     90     //吃
     91     public void eat() 
     92     {
     93         System.out.println("乒乓球运动员吃大白菜,喝小米粥");
     94     }
     95     
     96     //学习
     97     public void study() 
     98     {
     99         System.out.println("乒乓球运动员学习如何发球和接球");
    100     }
    101     
    102     //说英语
    103     public void speak() 
    104     {
    105         System.out.println("乒乓球运动员说英语");
    106     }
    107 }
    108 
    109 //定义篮球运动员具体类
    110 class BasketballPlayer extends Player 
    111 {
    112     public BasketballPlayer(){}
    113     
    114     public BasketballPlayer(String name,int age) 
    115     {
    116         super(name,age);
    117     }
    118     
    119     //吃
    120     public void eat() 
    121     {
    122         System.out.println("篮球运动员吃牛肉,喝牛奶");
    123     }
    124     
    125     //学习
    126     public void study() 
    127     {
    128         System.out.println("篮球运动员学习如何运球和投篮");
    129     }
    130 }
    131 
    132 //定义乒乓球教练具体类
    133 class PingPangCoach extends Coach implements SpeakEnglish 
    134 {
    135     public PingPangCoach(){}
    136     
    137     public PingPangCoach(String name,int age) 
    138     {
    139         super(name,age);
    140     }
    141     
    142     //吃
    143     public void eat() 
    144     {
    145         System.out.println("乒乓球教练吃小白菜,喝大米粥");
    146     }
    147     
    148     //教
    149     public void teach() 
    150     {
    151         System.out.println("乒乓球教练教如何发球和接球");
    152     }
    153     
    154     //说英语
    155     public void speak() 
    156     {
    157         System.out.println("乒乓球教练说英语");
    158     }
    159 }
    160 
    161 //定义篮球教练具体类
    162 class BasketballCoach extends Coach 
    163 {
    164     public BasketballCoach(){}
    165     
    166     public BasketballCoach(String name,int age) 
    167     {
    168         super(name,age);
    169     }
    170     
    171     //吃
    172     public void eat() 
    173     {
    174         System.out.println("篮球教练吃羊肉,喝羊奶");
    175     }
    176     
    177     //教
    178     public void teach() 
    179     {
    180         System.out.println("篮球教练教如何运球和投篮");
    181     }
    182 }
    复制代码

    10.03 运动员和教练案例测试

    复制代码
      1 //定义一个说英语的接口
      2 interface SpeakEnglish 
      3 {
      4     //说英语
      5     public abstract void speak();
      6 }
      7 
      8 //定义人的抽象类
      9 abstract class Person 
     10 {
     11     private String name;
     12     private int age;
     13     
     14     public Person() {}
     15     
     16     public Person(String name,int age) 
     17     {
     18         this.name = name;
     19         this.age = age;
     20     }
     21     
     22     public String getName() 
     23     {
     24         return name;
     25     }
     26     
     27     public void setName(String name) 
     28     {
     29         this.name = name;
     30     }
     31     
     32     public int getAge() 
     33     {
     34         return age;
     35     }
     36     
     37     public void setAge(int age) 
     38     {
     39         this.age = age;
     40     }
     41     
     42     //睡觉
     43     public void sleep() 
     44     {
     45         System.out.println("人都是要睡觉的");
     46     }
     47     
     48     //吃饭
     49     public abstract void eat();
     50 }
     51 
     52 //定义运动员抽象类
     53 abstract class Player extends Person 
     54 {
     55     public Player() {}
     56     
     57     public Player(String name,int age) 
     58     {
     59         super(name,age);
     60     }
     61     
     62     //学习
     63     public abstract void study();
     64 }
     65 
     66 //定义教练抽象类
     67 abstract class Coach extends Person 
     68 {
     69     public Coach() {}
     70     
     71     public Coach(String name,int age) 
     72     {
     73         super(name,age);
     74     }
     75     
     76     //教学
     77     public abstract void teach();
     78 }
     79 
     80 //定义乒乓球运动员具体类
     81 class PingPangPlayer extends Player implements SpeakEnglish 
     82 {
     83     public PingPangPlayer(){}
     84     
     85     public PingPangPlayer(String name,int age) 
     86     {
     87         super(name,age);
     88     }
     89     
     90     //吃
     91     public void eat() 
     92     {
     93         System.out.println("乒乓球运动员吃大白菜,喝小米粥");
     94     }
     95     
     96     //学习
     97     public void study() 
     98     {
     99         System.out.println("乒乓球运动员学习如何发球和接球");
    100     }
    101     
    102     //说英语
    103     public void speak() 
    104     {
    105         System.out.println("乒乓球运动员说英语");
    106     }
    107 }
    108 
    109 //定义篮球运动员具体类
    110 class BasketballPlayer extends Player 
    111 {
    112     public BasketballPlayer(){}
    113     
    114     public BasketballPlayer(String name,int age) 
    115     {
    116         super(name,age);
    117     }
    118     
    119     //吃
    120     public void eat() 
    121     {
    122         System.out.println("篮球运动员吃牛肉,喝牛奶");
    123     }
    124     
    125     //学习
    126     public void study() 
    127     {
    128         System.out.println("篮球运动员学习如何运球和投篮");
    129     }
    130 }
    131 
    132 //定义乒乓球教练具体类
    133 class PingPangCoach extends Coach implements SpeakEnglish 
    134 {
    135     public PingPangCoach(){}
    136     
    137     public PingPangCoach(String name,int age) 
    138     {
    139         super(name,age);
    140     }
    141     
    142     //吃
    143     public void eat() 
    144     {
    145         System.out.println("乒乓球教练吃小白菜,喝大米粥");
    146     }
    147     
    148     //教
    149     public void teach() 
    150     {
    151         System.out.println("乒乓球教练教如何发球和接球");
    152     }
    153     
    154     //说英语
    155     public void speak() 
    156     {
    157         System.out.println("乒乓球教练说英语");
    158     }
    159 }
    160 
    161 //定义篮球教练具体类
    162 class BasketballCoach extends Coach 
    163 {
    164     public BasketballCoach(){}
    165     
    166     public BasketballCoach(String name,int age) 
    167     {
    168         super(name,age);
    169     }
    170     
    171     //吃
    172     public void eat() 
    173     {
    174         System.out.println("篮球教练吃羊肉,喝羊奶");
    175     }
    176     
    177     //教
    178     public void teach() 
    179     {
    180         System.out.println("篮球教练教如何运球和投篮");
    181     }
    182 }
    183 class Demo
    184 {
    185     public static void main(String[] args)
    186     {
    187         //测试运动员(乒乓球运动员和篮球运动员)
    188         //乒乓球运动员
    189         PingPangPlayer ppp = new PingPangPlayer();
    190         ppp.setName("王浩");
    191         ppp.setAge(33);
    192         System.out.println(ppp.getName()+"---"+ppp.getAge());
    193         ppp.eat();
    194         ppp.sleep();
    195         ppp.study();
    196         ppp.speak();
    197         System.out.println("----------------");
    198         
    199         //篮球运动员
    200         BasketballPlayer bp = new BasketballPlayer();
    201         bp.setName("姚明");
    202         bp.setAge(34);
    203         System.out.println(bp.getName()+"---"+bp.getAge());
    204         bp.eat();
    205         bp.sleep();
    206         bp.study();
    207         //bp.speak(); //没有该方法
    208     }
    209 }
    复制代码

    运行结果:

    复制代码
    王浩---33
    乒乓球运动员吃大白菜,喝小米粥
    人都是要睡觉的
    乒乓球运动员学习如何发球和接球
    乒乓球运动员说英语
    ----------------
    姚明---34
    篮球运动员吃牛肉,喝牛奶
    人都是要睡觉的
    篮球运动员学习如何运球和投篮
    复制代码

    10.04 类名作为形式参数

    形式参数和返回值问题

    形式参数:基本类型、引用类型(类、抽象类、接口)

    返回值类型:基本类型、引用类型(类、抽象类、接口)

    例:

    复制代码
     1 class Student
     2 {
     3     public void study()
     4     {
     5         System.out.println("好好学习");
     6     }
     7 }
     8 class StudentTest
     9 {
    10     //形式参数是一个类
    11     public void method(Student s)
    12     {
    13         s.study();
    14     }
    15 }
    16 class Demo
    17 {
    18     public static void main(String[] args)
    19     {
    20         StudentTest st = new StudentTest();
    21         Student s = new Student();
    22 //需要的是该类的对象
    23         st.method(s);
    24     }
    25 }
    复制代码

    运行结果:

    好好学习

    10.05 抽象类名作为形式参数

    例:

    复制代码
     1 abstract class Person
     2 {
     3     public abstract void study();
     4 }
     5 
     6 class Student extends Person
     7 {
     8     public void study()
     9     {
    10         System.out.println("好好学习");
    11     }
    12 }
    13 class PersonTest
    14 {
    15     //形式参数是一个抽象类
    16     public void method(Person p)
    17     {
    18         p.study();
    19     }
    20 }
    21 class Demo
    22 {
    23     public static void main(String[] args)
    24     {
    25         PersonTest pt = new PersonTest();
    26         Person p = new Student();
    27         //需要该抽象类的子类对象
    28         pt.method(p);
    29     }
    30 }
    复制代码

    运行结果:

    好好学习

    10.06 接口名作为形式参数

    例:

    复制代码
     1 interface Love
     2 {
     3     public abstract void love();
     4 }
     5 class Teacher implements Love
     6 {
     7     public void love()
     8     {
     9         System.out.println("老师爱学生");
    10     }
    11 }
    12 class LoveTest
    13 {
    14     //形式参数是一个接口
    15     public void method(Love l)
    16     {
    17         l.love();
    18     }
    19 }
    20 class Demo
    21 {
    22     public static void main(String[] args)
    23     {
    24         LoveTest lt = new LoveTest();
    25         Love l = new Teacher();
    26         //需要该接口的实现类对象
    27         lt.method(l);
    28     }
    29 }
    复制代码

    运行结果:

    老师爱学生

    10.07 类名作为返回值类型

    例:

    复制代码
     1 class Student
     2 {
     3     public void study()
     4     {
     5         System.out.println("好好学习");
     6     }
     7 }
     8 class StudentTest
     9 {
    10     //返回值是一个类
    11     public Student getStudent()
    12     {
    13         //真实返回的是该类的对象
    14         return new Student();
    15     }
    16 }
    17 class Demo
    18 {
    19     public static void main(String[] args)
    20     {
    21         StudentTest st = new StudentTest();
    22         Student s = st.getStudent();
    23         s.study();
    24     }
    25 }
    复制代码

    10.08 抽象类名作为返回值类型

    例:

    复制代码
     1 abstract class Person
     2 {
     3     public abstract void study();
     4 }
     5 class Student extends Person
     6 {
     7     public void study()
     8     {
     9         System.out.println("好好学习");
    10     }
    11 }
    12 class PersonTest
    13 {
    14     //返回值是一个抽象类
    15     public Person getPerson()
    16     {
    17         //真实返回的是抽象类的子类对象
    18         return new Student();
    19     }
    20 }
    21 class Demo
    22 {
    23     public static void main(String[] args)
    24     {
    25         PersonTest pt = new PersonTest();
    26         Person p = pt.getPerson();
    27         p.study();
    28     }
    29 }
    复制代码

    10.09 接口名作为返回值类型

    例:

    复制代码
     1 interface Love
     2 {
     3     public abstract void love();
     4 }
     5 class Teacher implements Love
     6 {
     7     public void love()
     8     {
     9         System.out.println("老师爱学生");
    10     }
    11 }
    12 class LoveTest
    13 {
    14     //返回值是一个接口
    15     public Love getLove()
    16     {
    17         //真实返回的是该接口的实现类对象
    18         return new Teacher();
    19     }
    20 }
    21 class Demo
    22 {
    23     public static void main(String[] args)
    24     {
    25         LoveTest lt = new LoveTest();
    26         Love l = lt.getLove();
    27         l.love();
    28     }
    29 }
    复制代码

    10.10 链式编程

    例:

    复制代码
     1 class Student
     2 {
     3     public void study()
     4     {
     5         System.out.println("好好学习");
     6     }
     7 }
     8 class StudentTest
     9 {
    10     public Student getStudent()
    11     {
    12         return new Student();
    13     }
    14 }
    15 class Demo
    16 {
    17     public static void main(String[] args)
    18     {
    19         //链式编程,每次调用方法完毕后返回的是一个对象
    20         new StudentTest().getStudent().study();
    21     }
    22 }
    复制代码

    10.11 package关键字的概述及作用

    包的概述:其实就是文件夹

    作用:对类进行分类管理

    包的划分:

    例:学生的增加,删除,修改,查询和老师的增加,删除,修改,查询

    基本的划分:

    按照功能分

    cn.itcast.add(AddStudent,AddTeacher)

    cn.itcast.delete(DeleteStudent,DeleteTeacher)

    cn.itcast.update(UpdateStudent,UpdateTeacher)

    cn.itcast.find(FindStudent,FindTeacher)       

    按照模块分

    cn.itcast.teacher(AddTeacher,DeleteTeacher,UpdateTeacher,FindTeacher)

    cn.itcast.student(AddStudent,DeleteStudent,UpdateStudent,FindStudent)           

    10.12 包的定义及注意事项

    定义包的格式:package 包名; 多级包用.分开即可

    注意事项:

    1.package语句必须是程序的第一条可执行的代码

    2.package语句在一个java文件中只能有一个

    3.如果没有package,默认表示无包名

    10.13 带包的类编译和运行

    手动式

    1:javac编译当前类文件

    2:手动建立包对应的文件夹

    3:把1步骤的class文件放到2步骤的最终文件夹下

    4:通过java命令执行。

    注意:需要带包名称执行

    例:

    复制代码
    1 package cn.itcast;
    2 class Demo
    3 {
    4     public static void main(String[] args)
    5     {
    6         System.out.println("hello world");
    7     }
    8 }
    复制代码

    运行:

    自动式

    1:javac编译的时候带上-d即可

    例:javac -d . HelloWorld.java (-d后面跟的是目录, .表示当前目录)

    2:通过java命令执行。需要带包名称执行。

    10.14 不同包下类之间的访问

    例:

    定义两个类:Demo,Test。

    Demo:测试方法(main)

    Test:求和方法(sum)

    运行步骤如下:

     

    10.15 import关键字的概述和使用

    导包概述:不同包下的类之间的访问,每次使用不同包下的类的时候,都需要加包的全路径。比较麻烦。这个时候,java就提供了导包的功能。

    导包格式:import 包名;

    注意:这种方式导入是到类的名称。虽然可以最后写*,但是不建议。使用哪个类就导入哪个类。

    例:

    面试题:package,import,class有没有顺序关系?

    有,package>import>class

    package:只能有一个

    import:可以有多个

    class:可以有多个,建议只写一个

    10.16 四种权限修饰符

    10.17 类及其组成所使用的常见修饰符

    权限修饰符:public、protected、默认的、private

    状态修饰符:static、final

    抽象修饰符:abstract

     

    1.类:默认,public、final、abstract。其中使用public居多

    2.成员变量:四种权限修饰符均可,final、static。其中使用private居多

    3.构造方法:四种权限修饰符均可,其他不可以。其中使用public居多

    4.成员方法:四种权限修饰符均可,fianl、static、abstract。其中使用public居多

     

    10.18 内部类概述和访问特点

    把类定义在其他类的内部,这个类就被称为内部类。

    例:在类A中定义了一个类B,类B就是内部类。

    内部类的访问特点:

    内部类可以直接访问外部类的成员,包括私有。

    外部类要访问内部类的成员,必须创建对象。

    例:

    复制代码
     1 class Outer
     2 {
     3     private int num = 10;
     4 //内部类
     5     class Inner
     6     {
     7         public void show()
     8         {
     9             //内部类可以直接访问外部类的成员,包括私有
    10             System.out.println("show run..."+num);
    11         }
    12     }
    13     public void method()
    14     {
    15         //外部类要访问内部类的方法必须创建内部类的对象
    16         Inner in = new Inner();
    17         in.show();
    18     }
    19 }
    复制代码

    10.19 内部类分类及成员内部类的使用

    按照内部类在类中定义的位置不同,可以分为如下两种格式:

    在成员位置称为成员内部类

    在局部位置称为局部内部类

    例:

    复制代码
     1 class Outer
     2 {
     3     //成员内部类
     4     class Inner
     5     {
     6     }
     7     public void method()
     8     {
     9         //局部内部类
    10         class Inner
    11         {
    12         }
    13     }
    14 }
    复制代码

    外界创建成员内部类对象的格式:

    外部类名.内部类名对象名 = 外部类对象.内部类对象;

    例:

    复制代码
     1 class Outer
     2 {
     3     private int num = 10;
     4     //成员内部类
     5     class Inner
     6     {
     7         public void show()
     8         {
     9             System.out.println(num);
    10         }
    11     }
    12 }
    13 class Demo
    14 {
    15     public static void main(String[] args)
    16     {
    17         //访问Inner类的show()方法
    18      //外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    19         Outer.Inner oi = new Outer().new Inner();
    20         oi.show();
    21     }
    22 }
    复制代码

    10.20 成员内部类的常见修饰符及应用

    成员内部类的常见修饰符

    1.private 为了保证数据的安全性

    例:

    复制代码
     1 class Outer
     2 {
     3     //成员内部类,私有
     4     private class Inner
     5     {
     6         public void show()
     7         {
     8             System.out.println("满足条件输出");
     9         }
    10     }
    11     public void method(int num)
    12     {
    13         if(num > 0)
    14         {
    15             Inner i = new Inner();
    16             i.show();
    17         }
    18     }
    19 }
    20 class Demo
    21 {
    22     public static void main(String[] args)
    23     {
    24         Outer o = new Outer();
    25         o.method(-8);
    26     }
    27 }
    复制代码

    上例中,只有当method方法传入的参数大于0时,才可以创建内部类的对象调用方法,否则不创建

    2.static 为了让数据访问更方便

    • 被静态修饰的成员内部类只能访问外部类的静态成员
    • 内部类被静态修饰后的方法可以有静态方法也可以有非静态方法

    例:

    复制代码
     1 class Outer
     2 {
     3     private static int num = 10;
     4     //成员内部类,静态
     5     public static class Inner
     6     {
     7         //静态方法
     8         public static void show1()
     9         {
    10             System.out.println(num);
    11         }
    12         //非静态方法
    13         public void show2()
    14         {
    15             System.out.println(num);
    16         }
    17     }
    18 }
    19 class Demo
    20 {
    21     public static void main(String[] args)
    22     {
    23         //成员内部类被静态修饰后的访问方式:
    24         //外部类名.内部类名 对象名 = new 外部类名.内部类名();
    25         Outer.Inner oi = new Outer.Inner();
    26         oi.show1();
    27         oi.show2();
    28 
    29         //静态方法show1()的另一种调用方式
    30         Outer.Inner.show1();
    31     }
    32 }
    复制代码

    10.21 成员内部类的面试题

    分别输出30、20、10

    复制代码
     1 class Outer
     2 {
     3     public int num = 10;
     4     class Inner
     5     {
     6         public int num = 20;
     7         public void show()
     8         {
     9             int num = 30;
    10             System.out.println(num);//30
    11             System.out.println(this.num);//20
    12             System.out.println(new Outer().num);//10
    13             System.out.println(Outer.this.num);//10
    14         }
    15     }
    16 }
    17 class Demo
    18 {
    19     public static void main(String[] args)
    20     {
    21         Outer.Inner oi = new Outer().new Inner();
    22         oi.show();
    23     }
    24 }
    复制代码

    10.22 局部内部类访问局部变量的问题

    1.可以直接访问外部类的成员

    2.在局部位置可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

    例:

    复制代码
     1 class Outer
     2 {
     3     private int num = 10;
     4     public void method()
     5     {
     6         //局部内部类
     7         class Inner
     8         {
     9             public void show()
    10             {
    11                 //可以直接访问外部类的成员
    12                 System.out.println(num);
    13             }
    14         }
    15         //在局部位置创建内部类对象
    16         Inner i = new Inner();
    17         //通过对象调用内部类方法
    18         i.show();
    19     }
    20 }
    21 class Demo
    22 {
    23     public static void main(String[] args)
    24     {
    25         Outer o = new Outer();
    26         o.method();
    27     }
    28 }
    复制代码

    局部内部类访问局部变量的注意事项:

    例:

    复制代码
     1 class Outer
     2 {
     3     public void method()
     4     {
     5         //局部变量
     6         final int num = 20;
     7         //局部内部类
     8         class Inner
     9         {
    10             public void show()
    11             {
    12                 //局部内部类访问局部变量,该局部变量必须被声明为最终类型
    13                 System.out.println(num);
    14             }
    15         }
    16 
    17         Inner i = new Inner();
    18         i.show();
    19     }
    20 }
    21 class Demo
    22 {
    23     public static void main(String[] args)
    24     {
    25         Outer o = new Outer();
    26         o.method();
    27     }
    28 }
    复制代码

    因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。

    10.23 匿名内部类的格式和理解

    匿名内部类就是内部类的简化写法。

    前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。

    格式:new 类名或者接口名() {重写方法;}

    本质:是一个继承了该类或者实现了该接口的子类匿名对象

    例:

    10.24 匿名内部类的方法调用

    例:

    复制代码
     1 interface Inter
     2 {
     3     public abstract void show1();
     4     public abstract void show2();
     5 }
     6 class Outer
     7 {
     8     public void method()
     9     {
    10         /* 一个方法的调用
    11         new Inter()
    12         {
    13             public void show1()
    14             {
    15                 System.out.println("show1");
    16             }
    17         }.show1();
    18         */
    19         //两个方法的调用
    20         Inter i = new Inter()
    21         {
    22             public void show1()
    23             {
    24                 System.out.println("show1");
    25             }
    26             public void show2()
    27             {
    28                 System.out.println("show2");
    29             }
    30         };
    31         i.show1();
    32         i.show2();
    33     }
    34 }
    35 class Demo
    36 {
    37     public static void main(String[] args)
    38     {
    39         Outer o = new Outer();
    40         o.method();
    41     }
    42 }
    复制代码

    10.25 匿名内部类在开发中的应用

    例:

    复制代码
     1 interface Person
     2 {
     3     public abstract void study();
     4 }
     5 class PersonDemo
     6 {
     7     public void method(Person p)
     8     {
     9         p.study();
    10     }
    11 }
    12 class Demo
    13 {
    14     public static void main(String[] args)
    15     {
    16         PersonDemo pd = new PersonDemo();
    17         pd.method(new Person()
    18         {
    19             public void study()
    20             {
    21                 System.out.println("好好学习");
    22             }
    23         });
    24     }
    25 }
    复制代码

    当函数参数是接口类型时,而且接口中的方法不超过三个,可以用匿名内部类作为实际参数进行传递

    10.26 匿名内部类的面试题

    按照要求,补齐代码,要求在控制台输出”HelloWorld”

    复制代码
     1 interface Inter 
     2 { 
     3     void show(); 
     4 }
     5 class Outer 
     6 { 
     7     //补齐代码 
     8 }
     9 class Demo
    10 {
    11     public static void main(String[] args)
    12     {
    13         Outer.method().show();
    14     }
    15 }
    复制代码

    补齐代码:

    复制代码
     1 /*
     2 分析:
     3 1:Outer.method()可以看出method()是Outer中的一个静态方法
     4 2:Outer.method().show()可以看出method()方法的返回值是一个对象。
     5 又由于接口Inter中有一个show()方法,所以method()方法的返回值类型是一个接口。
     6 */
     7 interface Inter 
     8 { 
     9     void show(); 
    10 }
    11 class Outer 
    12 { 
    13     //补齐代码 
    14     public static Inter method()
    15     {
    16         return new Inter()
    17         {
    18             public void show()
    19             {
    20                 System.out.println("helloworld");
    21             }
    22         };
    23     }
    24 }
    25 class Demo
    26 {
    27     public static void main(String[] args)
    28     {
    29         Outer.method().show();
    30     }
    31 }
  • 相关阅读:
    promise异步获取数据
    解决浏览器保存密码自动填充问题
    函数柯里化
    JS高级函数的用法
    Object.assign替代写法
    tree-shaking
    假如参数是对象或者函数,如何处理
    宏任务与微任务 event-loop
    Linux常用命令大全
    Image Processing
  • 原文地址:https://www.cnblogs.com/hoop-superman/p/5495697.html
Copyright © 2020-2023  润新知