javase的一些基础(3)

  抽象类的特点:

              A:抽象类和抽象方法必须用abstract关键字修饰

              B:抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类

              C:抽象类不能实例化,因为它不是具体的。

                 抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?

                 用于子类访问父类数据的初始化

              D:抽象的子类

                     a:如果不想重写抽象方法,该子类是一个抽象类。

                     b:重写所有的抽象方法,这个时候子类是一个具体的类。      

              E:抽象类的实例化其实是靠具体的子类实现的。是多态的方式。

                     Animal a = new Cat();

  抽象类的成员特点:

              成员变量:既可以是变量,也可以是常量。

              构造方法:有。 用于子类访问父类数据的初始化。

              成员方法:既可以是抽象的,也可以是非抽象的。

             

       抽象类的成员方法特性:

              A:抽象方法 强制要求子类做的事情。

              B:非抽象方法 子类继承的事情,提高代码复用性。

  一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

         A:可以。

         B:不让创建对象。

  abstract不能和哪些关键字共存?

         private     冲突

         final    冲突      

         static       无意义

  接口的特点:

              A:接口用关键字interface表示   

                     interface 接口名 {}

              B:类实现接口用implements表示

                     class 类名 implements 接口名 {}

              C:接口不能实例化

                     那么,接口如何实例化呢?

                     按照多态的方式来实例化。

              D:接口的子类

                     a:可以是抽象类。但是意义不大。

                     b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

      

       由此可见:

              A:具体类多态(几乎没有)

              B:抽象类多态(常用)

              C:接口多态(最常用)

  接口成员特点

              成员变量:只能是常量,并且是静态的。

                            默认修饰符:public static final

                            建议:自己手动给出。

              构造方法:接口没有构造方法。

              成员方法:只能是抽象方法。

                            默认修饰符:public abstract

                            建议:自己手动给出。

             

       所有的类都默认继承自一个类:Object。

       类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

  类与类:

              继承关系,只能单继承,可以多层继承。

   类与接口:

              实现关系,可以单实现,也可以多实现。

              并且还可以在继承一个类的同时实现多个接口。

       接口与接口:

              继承关系,可以单继承,也可以多继承。

  抽象类和接口的区别:

    A:成员区别

           抽象类:

                  成员变量:可以变量,也可以常量

                  构造方法:有

                  成员方法:可以抽象,也可以非抽象

           接口:

                  成员变量:只可以常量

                  成员方法:只可以抽象

             

    B:关系区别

           类与类

                  继承,单继承

           类与接口

                  实现,单实现,多实现

           接口与接口

                  继承,单继承,多继承

             

    C:设计理念区别

           抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。

           接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

  修饰符:

              权限修饰符:private,默认的,protected,public

              状态修饰符:static,final

              抽象修饰符:abstract

             

       类:

              权限修饰符:默认修饰符,public

              状态修饰符:final

              抽象修饰符:abstract

             

              用的最多的就是:public

             

       成员变量:

              权限修饰符:private,默认的,protected,public

              状态修饰符:static,final

             

              用的最多的就是:private

             

       构造方法:

              权限修饰符:private,默认的,protected,public

             

              用的最多的就是:public

             

       成员方法:

              权限修饰符:private,默认的,protected,public

              状态修饰符:static,final

              抽象修饰符:abstract

             

              用的最多的就是:public

             

       除此以外的组合规则:

              成员变量:public static final

              成员方法:public static

                        public abstract

                              public final

  权限修饰符

                                   本类       同一个包下    不同包下的子类    不同包下的无关类

              private            Y

              默认                Y            Y

              protected        Y            Y                   Y

              public              Y            Y                   Y                          Y

  内部的访问特点:

              A:内部类可以直接访问外部类的成员,包括私有。

              B:外部类要访问内部类的成员,必须创建对象。

  内部类位置

              成员位置:在成员位置定义的类,被称为成员内部类。  

              局部位置:在局部位置定义的类,被称为局部内部类。

  成员内部类:

              如何直接访问内部类的成员。

              外部类名.内部类名 对象名 = 外部类对象.内部类对象;

              Outer.Inner oi = new Outer().new Inner();

  局部内部类

              A:可以直接访问外部类的成员

              B:在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

      

       面试题:

              局部内部类访问局部变量的注意事项?

              A:局部内部类访问局部变量必须用final修饰

              B:为什么呢?

                     局部变量是随着方法的调用而调用,随着调用完毕而消失。

                     而堆内存的内容并不会立即消失。所以,我们加final修饰。

                     加入final修饰后,这个变量就成了常量。既然是常量。你消失了。

                     我在内存中存储的是数据20,所以,我还是有数据在使用。

原文地址:https://www.cnblogs.com/lenbore/p/4751125.html