精华内容
下载资源
问答
  • 抽象类和接口

    2021-05-17 19:44:43
    抽象类和接口(总) 抽象类的引入 代码小细节 : 将一个基类 定义为抽象类后就不再允许定义它的对象了。 sysout+alt+/ 方法名+alt+/ 重写 public interface Comparable{//接口 public final int NUM = 20...

    抽象类和接口(总)

    抽象类的引入

    • 代码小细节

      • 将一个基类 定义为抽象类后就不再允许定义它的对象了。

      • sysout+alt+/

      • 方法名+alt+/ 重写

      • public interface Comparable{//接口
            public final int NUM = 20;//定义常量属性
            int NUM = 20;//定义常量的第二种方法
            public abstract void train();//定义抽象方法
            public abstract void compareTo(Object another);//定义抽象方法
            void fun();//默认是抽象方法,因为接口中不允许定义其他方法
            public  void fun();//默认是抽象方法,因为接口中不允许定义其他方法
            public static void funStatic(){
                System.out.println("接口中的静态方法");
            }
            public default void funDefault(){
                System.out.println("接口中的default方法");
            }
        }
        
    • 基类本身生成的对象的不合理性 :例如:动物类作为基类可以派生出猫类和狗类,但是动物类本身生成对象明显不合理。因此可以将其定义为抽象类

    • 抽象类的特点

      • abstract修饰;
      • 类中可以定义抽象方法;(不强制要求)
    • 抽象方法

      • 由abstract修饰;

      • 方法只有声明没有方法体

        • public abstract clss Animal{
              private String color;
              public abstract void shout();//只有声明没有方法体
          }
          
      • 如果一个类里面有一个或多个抽象方法,那么就必须将这个类定义为abstract类。

    • 派生类继承抽象类

      • 派生类继承抽象类要么继承抽象类中所有的抽象方法,要么派生类也定义为抽象类

      • public class Cat extends Animal{
            public void shout(){
                System.out.println("喵喵喵");
            }
        }
        
      • public abstract class Cat extends Animal{
            
        }
        
      • public class PersianCat extends Cat{
            public void shout(){
                System.out.println("喵喵喵");
            }
        }
        
      • 如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。

        如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。

        即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。

    接口(只允许公开的、抽象的、默认的、静态的和严格的)

    • 引入:有些动物有一些特殊的技能,例如钻火圈等,这些额外的动作不是所有动物一开始就具备的,所以Java提供接口来定义这些额外的功能,接口中并不给出具体的实现(抽象方法),将来那些动物需要被训练,只需要把额外的功能实现即可。

    • 接口:是一系列方法的声明方法特征的集合

    • 接口可以看作是一种特殊的抽象类,其中包含常量抽象方法的声明,而没有变量和方法的实现。JDK8之后可以定义staticdefault方法。

    • 常量和抽象方法只能用public修饰。

    • staticdefault方法必须有方法体 。访问权限修饰符:公开的、默认的

    • 定义语法(非常重要

      • public interface Comparable{
            public final int NUM = 20;//定义常量属性
            int NUM = 20;//定义常量的第二种方法
            public abstract void train();//定义抽象方法
            public abstract void compareTo(Object another);//定义抽象方法
            void fun();//默认是抽象方法,因为接口中不允许定义其他方法
            public  void fun();//默认是抽象方法,因为接口中不允许定义其他方法
            public static void funStatic(){
                System.out.println("接口中的静态方法");
            }
            public default void funDefault(){
                System.out.println("接口中的default方法");
            }
        }
        
    • 可以通过实现接口的方式具体接口中定义的功能

      • 一个类实现接口要么实现接口中所有的抽象方法,要么该类必须定义为抽象类

        • public abstract class Cat extends Animal implements Comparable{
              public void shout(){
                  System.out.println("喵喵喵");
              }
          }
          
        • public class Cat extends Animal implements Comparable{
              public void shout(){
                  System.out.println("喵喵喵");
              }
              public abstract void train(){
                  System.out.println("我会钻火圈啦!");
              }
              public abstract void compareTo(Object another){
                  System.out.println("一个类要么实现接口中所有的抽象方法要么就将自己定义为abstract类");
              }
              //重写接口中的default方法
               public void funDefault(){//不再写default修饰符
                  System.out.println("重写接口中的default方法");
              }
          }
          
        • 接口的实现类不允许重写static方法

        • 接口中的实现类可以选择重写default方法 ,重写的话不加default修饰符

      • 一个类可以实现多个接口;

      • 一个接口可以被多个无关的类实现

    • 接口的继承

      • Java中的接口可以继承接口,与类的继承概念一致,一个接口继承一个父接口就会继承父接口中定义的所有方法和属性

      • 接口不能继承类

      • 一个接口可以继承多个接口

        • public interface Comparable extends INTERFACE1,INTERFACE2...{
              
          }
          
    展开全文
  • 抽象类和接口,抽象类和接口的区别

    千次阅读 多人点赞 2016-11-21 17:28:05
    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。 看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个...

               

    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。

    看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个小学生,希望能有大牛解惑和 互动。

    红色字体是概念。括号中的文字都是我的想法,就是抽象类和接口的应用性,如何应用!


              抽象类:abstract
                    抽象类可以有抽象方法也可以有普通方法。
                    但是有抽象方法的类必须是抽象类。
                    继承抽象类,必须实现抽象类中所用的抽象方法,不然把该类也变成抽象类。

                    (抽象类是从下而上的,因为必须先知道有狗,猫这两个类,才会创建一个抽象类,让他们继承。抽象类是实现行为)
                    
              接口: interface
                    所用的方法都是抽象方法。
                    变量都是静态常量。

                    (接口是从上而下的,因为当时创建接口的时候你并不需要知道谁使用。就好像有一个飞的接口,不止小鸟类能实现,飞机 也能实现。接口是定义行为)
                    
             接口和抽象类的区别:
                   抽象类是单继承的,是一个类。
                   接口可以多现实,接口也继承多个接口。是一个接口
                   接口是一个特殊的抽象类。

                   (抽象类是单继承,既然是个类,面向对象的概念就是一个模板,所以没有更好的延伸性。
                    假如有一个门的抽象类,那门肯定是拥有开门和关门的方法。
                    如果这个门需要一个指纹系统开门呢,开门需要一个报警系统呢,还有自动门。门肯定就是门,只需要实例的时候确实是 个门就可以了。
                    那这个时候就可以实现接口,因为接口不需要这种完全依赖关系,只要能用就可以实现
                    自动门实现红外线自动识别功能的接口、需要指纹识别的门也只需要实现指纹识别的这个接口。
                    只要你能想得到,是可以实现多个接口。
                    抽象类是要实现的行为,因为必然会有子类要继承,实现抽象方法,所以肯定是先知道子类,才会创建抽象类,所以是从 下而上
                    接口是定义行为,接口定义的行为是因为以后会出现很多个类要拥有这个功能才创建的,所以是从上而下)
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,694
精华内容 20,677
关键字:

抽象类和接口