JavaSE学习day04

    方法重写(override)和方法重载(overload):

重写:发生在继承中,当子类出现和父类一模一样的方法时,子类会重写(覆盖,复写)父类的方法,并调用子类的功能;

           

            使用特点:如果方法名不同,则使用各自的方法;

                            如果方法名相同,则最终使用子类的方法;

            使用注意事项:1)父类的私有方法不能被重写;

                                    2)子类在重写时,访问权限不能比父类的更低;

                                    3)当要重写父类方法是静态的时,子类也必须是静态重写;


重载:发生在同一个类中,当方法名相同,而参数列表(参数个数/参数类型)不同时,发生方法重载,与返回值无关;

关键字 final  :  最终的,终态的,无法更改的;

                      可修饰:

                          类:     被final修饰的类不能被继承;

                         变量:  被final修饰的变量(局部变量/成员变量)一旦被定义,则该变量便是常量,在使用前只能初始化一次;

                                        常量的分类:1)字面值常量 :PI 

                                                            2)自定义的常量:被final修饰,字母全部大写

                          方法:  被final修饰的成员方法不能被重写;

多态:就是一个事物在不同时刻体现出的不同状态;(水)

(1)产生多态的前提条件:

                              1)必须发生继承关系;

                              2)必须有方法重写,将父类方法覆盖掉;

                              3)必须有父类引用指向子类对象,向上转型

                                    格式 : 父类名   父类引用  =  new  子类名();

(2)多态成员访问特点:

                            1)当访问成员变量时,编译和运行都看左边(父类),只有当父类中有该变量时,才可编译运行;

                            2)当访问(非静态)方法时,编译看左边(父类),运行看右边(子类);

                            3)当访问静态成员时,编译和运行都看左边(父类),静态与类有关;


                           

 
      (3)多态的好处:

                            1)提高了代码的扩展性;(多态)

                            2)提高了代码的维护性;(继承)

     (4)多态的弊端:

                            不能访问子类的特有功能;

            改进:向下转型:前提是必须有向上转型(多态)

                       子类名   子类引用  =  (子类名)父类引用;

                        子类引用 . 子类特有功能;

                        使用不当时会发生 ClassCastException 异常


抽象类:被 abstract 修饰的类,只给出抽象功能

                    将具体的类抽象出来,在类中只给出抽象(abstract)方法,只有方法名和返回值,但没有方法体;

         格式:abstract class  类名(父类名){

                       public  abstract  返回值  方法名();

                        ... 

                   }  

        注意:1)抽象类中不一定都有抽象方法,但有抽象方法的类必定为抽象类;

                  2)抽象类中不仅含有抽象方法,还可以含有非抽象方法;

抽象类的特点:

                   1)抽象类不能实例化(不能创建对象)

                   2)子类必须重写抽象类(父类)的抽象方法;

                        抽象类的子类格式: 父类名  父类引用  =  new   子类名();//抽象类多态

抽象类成员的特点:

                   1)成员变量:可以是一个变量,也可以是一个常量;

                   2)构造方法:有构造方法,但不能实例化,作用:用于子类访问父类数据的初始化

                                         所有的构造方法都是给对象初始化的;(1)显示初始化;(2)默认初始化

                   3)成员方法:abstract修饰,被继承时子类必须被重写,

                                         可以是抽象方法(限定子类必须重写哪些功能)

                                         也可以是非抽象方法(提高代码的复用性)

            abstract 不能与   private   final   static 这三个关键字共存,会产生冲突;

    接口:( 遵循面向接口编程 )

                            定义一些扩展功能,只有哪个类实现的这个接口,那这个类就必须去实现这些扩展功能;

                格式:   interface  接口名{

                                        默认修饰(public static final)变量;

                                        默认修饰(public abstract) 返回值  方法名();  

                            }

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

                    ****接口不能实例化(不能创建对象)由子类创建对象

                子实现类 :  接口名   引用  =  new    实现类名();//接口类多态   

            实际开发中命名规则:

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

    接口的特点:

                      1)成员变量:只能是常量  默认修饰( public static final )

                      2)成员方法:只能是抽象方法  默认修饰( public abstract )

                      3)接口中没有构造方法,接口主要是扩展功能的,没有具体的类;

关系:

     类与类的关系: 继承( extends )关系,只能是单继承,但可以多层继承;

     类与接口的关系:实现(implements)关系,可以多实现,并且一个类继承另一个类时,还可以实现多个接口;

     接口与接口的关系:继承(extends)关系,可以单继承,也支持多继承;

            ****任何类都要继承同一个类 Object ,它是所有类的根类;

       

面试题: 抽象类与接口的区别:

    1)成员: 变量 :  抽象类的变量可以是变量,也可以是常量;

                                接口中的变量只有常量,默认被public static final修饰 ;

                     方法:抽象类有抽象方法,也可以有非抽象方法;

                               接口中只有抽象方法,默认被 public abstract   修饰 

    2) 关系:

                 类与类的关系: 继承( extends )关系,只能是单继承,但可以多层继承;

                 类与接口的关系:实现(implements)关系,可以多实现,并且一个类继承另一个类时,还可以实现多个接口;

                 接口与接口的关系:继承(extends)关系,可以单继承,也支持多继承;

    3)设计理念:

                    抽象类:被继承,体现的是“ is a ”的关系,共性功能;

                    接口:被实现,体现的是“like a”的关系,扩展功能;


                       


         

                     

                    

猜你喜欢

转载自blog.csdn.net/qq_42371269/article/details/81058640