zoukankan      html  css  js  c++  java
  • 《java JDK7 学习笔记》之接口与多态

    1、对于“定义行为”也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的。

    类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法;二是再度将该方法标示为abstract。

    2、以java的语意来说,继承会有“是一种”的关系,操作接口则表示“拥有行为”,但不会有“是一种”的关系。对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。

    3、类可以操作两个以上的类,也就是可以拥有两种以上的行为。类可以同时继承某个类,并操作某些接口。接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

    4、使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会自动补齐。

    5、可以使用接口枚举常数,只能定义为public static final。为了方便,public static final可以省略,编译程序可以自行补齐。

    6、如果有两个接口都定义了某方法,操作两个接口的类并不会有错误,照样可以通过编译,但在设计上要思考一下:两个接口都有定义的方法是否表示不同的行为?若是相同的行为可以定义一个父接口;若是不同行为,得改变某个行为的方法名称。

    7、接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。

    8、如果有临时继承某个类或操作某个接口并建立实例的需求,而这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类来解决这个需求。匿名内部类的语法为:

      new  父类() |  接口(){

            //类本体操作

      };

    9、从JDK5之后新增了enum语法,可用于定义枚举常数。enum定义了特殊的类,继承自java.lang.Enum,不过这是由编译程序处理,直接撰写程序继承Enum类会被编译程序拒绝。

    10、enum实际上定义了类,而enum中列举的常数,实际上是public static final,且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

     

    课后练习选择题:

    1、interface Some{

             protected void doSome();

    }

    以下描述正确的是:编译失败。

    注:使用interface定义的接口内的行为方法默认是public abstract的,使用其他的编译程序会报错。

     

    2、interface Some{

              int x = 10;

       }

       public class Main{

            public static void main(String[] args){

                   System.out.println(Some.x);

            }

      }

    以下描述正确的是:显示10.

    注:在java类中,可以直接使用接口.常量来直接调用常量,而不用去实现接口,向外界透露实现的行为。

     

    3、interface Some{

             void doSome();

    }

    class SomeImpl implments Some{

          void doSome(){

               System.out.println(“做一些事”);

          }

    }

    public class Main{

       public static void main(String[] args){

            Some s = new SomeImpl();

            s.doSome();

       }

    }

    以下描述正确的是:编译失败。

    注:因为类实现接口后,再次定义接口内的行为方法,方法的修饰符必须是public的。

     

    4、interface Some{

             void doSome();

    }

    class SomeImpl implments Some{

          public void doSome(){

               System.out.println(“做一些事”);

          }

    }

    public class Main{

       public static void main(String[] args){

            Some s = new SomeImpl();

            s.doSome();

       }

    }

    以下描述正确的是:显示“做一些事”.

     

    5、interface Some{

              void doSome();

        }

        interface Other{

              void doOther();

        }

    class SomeOtherImpl implements Some,Other{

            public void doSome(){

                  System.out.println(“做一些事”);

           }

           public void doOther(){

                  System.out.println(“做其他事”);

            }

    }

    public class Main{

        public static void main(String[]  args){

              Some  s =  new SomeOtherImpl();

              s.doSome();

              Other o = (Other) s;

              o.doOther();

        }

    }

    以下描述正确的是:显示“做一些事”,“做其他事”。

     

    6、interface Some{

              void doSome();

        }

    abstract class AbstractSome implements Some{

           public abstract void doSome();

           public void doService(){

                 System.out.println(“做一些服务”);

          }

    }

    public class Main{

        public static void main(String[]  args){

              AbstractSome s = new AbstractSome();

              s.doService();

        }

    }

    以下描述正确的是:编译失败。

    注:抽象类不能被实例化,但可以创建实例作为匿名内部类使用。

     

    7、interface Some{

              void doSome();

        }

    abstract class AbstractSome implements Some{

           public abstract void doSome();

           public void doService(){

                 System.out.println(“做一些服务”);

          }

    }

    public class Main{

        public static void main(String[]  args){

              AbstractSome s = new AbstractSome(){

                   public void doSome(){

                         System.out.println(“做一些事”);

                  }

                  public void doService(){

                 }

             };

              s.doService();

        }

    }

    以下描述正确的是:执行时不显示任何信息。

     

    8、interface Some{

              void doSome();

        }

    public class main {

        public static void main(String[] args) {

            Some s = new Some(){
                public void doSome(){
                    System.out.println("做一些事");
                }
                public void doService(){
                    System.out.println("做一些服务");
                }
            };
            s.doService();   
        }
    }

    以下描述正确的是:编译失败。

    注:doService()方法没有在Some接口中声明。

     

    9、interface Some{

             protected static final int x = 10;

    }

    以下描述正确的是:编译失败。

    注:因为接口中定义的常量只能是public static final修饰。

     

    10、interface Some{

              void doSome();

              void doService(){

                 System.out.println("做一些服务");

             }

    }

    以下描述正确的是:编译失败。

    注:因为接口中定义的行为方法不能有具体实现。

  • 相关阅读:
    201771010125王瑜《面向对象程序设计(Java)》第十周学习总结
    201771010125王瑜《面向对象程序设计(Java)》第九周学习总结
    201771010125王瑜《面向对象程序设计(Java)》第八周学习总结
    7 Python外壳:代码结构
    6 python容器
    元组
    列表
    4 python基本元素之变量
    3 关于操作系统基本了解
    1 python是什么?
  • 原文地址:https://www.cnblogs.com/wanghongyun/p/6214208.html
Copyright © 2011-2022 走看看