Java不会的11 -- 接口、多态

1.接口
  (1)接口中的成员方法全是抽象的,不允许有普通方法
  (2)定义抽象方法:固定格式
       public abstract 返回值类型 方法名字(参数列表)  
  (3)接口中抽象方法, 修饰符public 写或者不写,都是public 
固定只能用public 权限
  (4)接口中成员变量的定义:
       要求:必须定义为常量,即使你的代码是这样写的:public int a,底层语言也会默认加上public static final int a转为常量。
       固定格式:
           public static final 数据类型 变量名  = 值


2.   接口中变量写法注意:
        //所以:
       public static final (1)这些修饰符在接口中可以不写,
                           (2)但是不写不等于没有。
                           (3)也可以选择性书写  比如只写public
       
      eg.public static final int x = 3;   --> int x = 3;
3.  接口中成员方法写法注意:
       (1)  public abstract 这些修饰符在接口中可以不写,
       (2)但是不写不等于没有。
       (3)也可以选择性书写  比如只写public


       (4)继承接口的类的方法,权限必须带public
           eg。 clas aImpl implements B{
              public void work(){} //public 必须带
        }
4.  接口多实现,没有安全隐患吗?
    多实现没有安全隐患,原因在于接口中的方法全是抽象,没有主体。
    依赖实现类,重写才可以执行,接口多实现中,没有安全问题的。
5.  接口多实现,避免的错误举例。


    (1)C 实现AB,AB的抽象方法同名,同参,不同返回值。实现哪个都报错
       public class A{ public abstract void a(); }
       public class B{ public abstract int a();  }
       public class C implements A,B{
 public abstract int a();  //XXXX
 public abstract void a();  //XXXX


6.接口与接口之间可以是多继承的关系。   
  问:Java中有多继承吗?
  答:类没有多继承,
      接口之间有多继承
7.接口的优点:
  (1)增加可扩展性
  (2)降低耦合性
8.接口和抽象类的区别:
   eg.犬:方法:吃饭
                吼叫
      缉毒犬:方法:吃饭
                    吼叫
                    缉毒(额外功能)
       class 缉毒犬  extends 犬科 implements 缉毒:
          is a 关系                like a关系
       这条缉毒犬是犬科的一种,看起来是缉毒犬
   区别;(1)抽象类的子类可以实现父类的部分方法;接口的实现类必须实现接口的全部方法
         (2)一个类只能继承1个父类,可以实现多个接口


    二者的选用:
        优先使用接口,尽量少用抽象类
9.多态
  (1)通过多态new 一个对象,调用方法时,调用的是子类的方法
   public class Student extends Person{
     public void work(){}




    Person p = new Student();
   p.work()://调用的是子类student的方法
}
  (2)多态中成员变量:
       编译的时候,参考父类中有没有这个变量,如果有,编译成功,没有编译失败!!!
       运行的时候,运行的是父类中的变量值


      public class Zi extends Fu{}
      //
      Fu f  new Zi();
      System.out.println(f,a);//输出的变量是父类的变量a


   (3)多态中的成员方法:
      编译的时候,参考父类中有没有这个方法,如果有,编译成功,没有编译失败。
      运行的时候,运行的是子类的重写方法。
    !!!理解上述:参考孔子装爹案例。(网上搜)
   
10 instance of 关键字
   eg.Student extends Person 
      Person p = new Student;
      boolean b = p instanceof Student;//比较,p是不是Student类型的对象,如果是,intanceof返回true。 
11. Fu f = new Zi();
    //运算的两个数据类型,是不同的。父类是父类类型,子类是子类类型。父类范围大,子类范围小,子类强制提升为父类类型。简称向上转型。
12.多态中成员访问的特点分别是什么?
   在多态中


对于普通方法:


编译时看左边,运行时看右边。


对于静态方法:


编译、运行都看左边


对于成员变量:


编译、运行看左边


13.如果一个方法的返回值类型是父类,那么能否返回一个子类对象?
   可以,相当于自动类型提升。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值