java中关于抽象类,多态和接口的格式

《一》 关于抽象类:
  (1)抽象类:
         比如动物吃的功能,每个具体的动物吃的功能不一样,在当前类中只是给出一个方法声明(抽象的,不带方法体)
          在一个类中,给出一个抽象功能,就必须将这个类定义为抽象类!

 (2) 抽象类的格式
              abstract class 父类名(Animal){
              }

 (3) 抽象方法的格式:
            public abstract(必须写)  方法名() ;  //抽象方法

 
 (4) 抽象类的特点:
             1)抽象类不能直接实例化(不能直接创建对象)
             2)子类必须重写父类的抽象功能

 (5) 抽象类成员的特点:

                    成员变量:
                    可以是变量,也可以是一个常量(自定义常量)
              构造方法:
    
                  所有的构造方法都是给对象进行初始话:1)默认初始化 2)显示初始化
              成员方法:
                       可以是抽象的方法,也可以非抽象的方法

《二》 关于多态:
 (1) 多态:  
                某个事物在不同时刻体现出来的不同状态!
          水:        事物
         液态    气态   固态
 
          猫狗案例:
              创建一个猫类的对象            右-->左
              Cat cat = new Cat() ; //猫是猫
              Animal a = new Cat() ;//也是另外一种方式:猫是动物
 
 (2) 多态的前提条件:

          1)必须有继承关系
          2)必须方法重写
              猫狗案例:每个动物具体的吃的功能是不一样,必须有方法重写,将父类的功能覆盖掉!
         3)必须有父类引用指向子类对象        :向上转型
                  格式:
                      父类名  对象名  = new 子类名();
 (3)多态利与弊

     多态的好处:

          1)提高代码的扩展性(由多态保证)
          2)提高代码的维护性(由继承关系)
     多态的弊端:

          不能访问子类特有功能

     如何解决多态的弊端?     
                  1)子类 对象名 = new 子类名() ;
                        Son s = new Son();
                        s.method();

                这种式可以去访问子类的特有功能,但是不好的原因:从内角度来考虑,他不断在堆内存开辟空间,浪费空间

                  2)向下转型:前提必须有向上转型

                将父类的对象强制转换为子类的引用

                 Son s = (Son)f;

                         s.method();  

 (4) 多态中的成员访问特点:

          1)成员变量的访问特点:
              编译看左,运行看左    (左:父类)
          2)成员方法(一般没有强调静态方法都是非静态的)的访问特点:
            编译看左,运行看右
        3)构造方法:作用:就是给对象进行初始化的
         4)静态的成员方法的访问特点:
              编译看左,运行看左(静态的成员方法算不上方法重写,因为静态的都和类有直接关系!)

《三》 关于继承:
 
(1): 继承中的成员方法访问特点:

          子类继承父类,当成员方法名称不一致的时候,分别调用
          当成员方法名称一致的情况,首先在子类中有么有该方法,如果有,就调用;如果没有,就调用父类的成员方法;
(2):

  方法重写:override:继承里面的技术

          当子类出现了和父类一模一样的方法的时候,子类的方法会重写(覆盖,复写)父类的方法,调用的子类的功能

  方法重载:overload:方法里面的

          在方法中,多个方法名相同,并且他的参数列表不同,与返回值无关
                  参数列表不同:
                      1)参数个数不同
                     2)参数类型不同
(3)关于final关键字:

  final:最终的,终态的,无法更改的!
 
  在实际开发中,有些方法不能直接覆盖的,这对这种情况,不想让子类重写父类的方法,引出final关键字
 

  final的用法:
          final可以修饰类,该类不能被继承!
          final可以修饰变量(可以成员变量,局部变量),这个变量此时一个常量
          final可以修饰成员方法,方法不能被重写
 
  常量的分类
          字面值值常量
          自定义常量    final                
                 

《四》关于接口:

   (1) 接口:(开发过程中要遵循面向接口编程!)

         将一些额外(扩展)功能,暴露出来,只要哪些类实现了这个接口,就一定要取实现接口中的功能!
         
      格式:
          interface 接口名{
              
          }
 
  接口的实现类和接口之间是一种实现关系

          class 类名  implements(实现) 接口名{
          
          }

  接口的子实现类:

         1)如果接口的实现类是一个抽象类;没有意义,接口本身不能实例化,需要通过子实现类来进行实例化,如果子实现类都被抽象了,不能创建对象了,这种没意义!
                  

         2)接口的实现类是具体类,接口名 对象名 = new 子实现类名() ; 接口多态(推荐方式:开发中这种方式最多)
 
  接口不能实例化(不能创建对象)
 
  实际开发中命名规则:

      实现类命名规则:接口名+impl :实现类

  (2) 接口的成员特点:
          成员变量:
              存在默认的修饰符:    public static finla
          构造方法:接口中没有构造方法
          成员方法:
              默认的修饰符:public abstract


 (3)类与接口的区别:
  访问修饰符 :
    抽象方法可以有public、protected和default这些修饰符     接口方法默认修饰符是public。不可以使用其它修饰符。

  关系的区别:
      类与类的关系
              extends:继承关系     单继承,不能多继承,但是可以多层继承
      类与接口的关系:implements :实现关系 ,并且一个类继承另一个类的同时还能实现多个接口
      
      接口与接口的关系:
              extends关系:可以是单继承,可以是多继承的!
 

猜你喜欢

转载自blog.csdn.net/qq_42736375/article/details/81116404