方法重载与重写;修饰词;final;static;常量;单例模式;抽象类

方法的重载(overload)与重写(override)

概念:

     重载:  在同一个类中,方法名相同,参数列表不同

     重写:    子类重写父类的方法,方法名相同,参数列表相同

                 返回值类型可以相同,也可以是父类方法的返回值类型的子类

                 修饰词可以相同,或者权限比父类方法的权限大

访问权限控制修饰词

修饰的成员变量和方法

                             本类中      同一包下     子类        其他

    public                true          true              true         true

    protected          true          true              true

    default              true          true

    private              true   

    

final:

    (1)修饰类:不能被继承,意义在 减少随意扩展功能的可能性,减少对系统的危害

    (2)修饰变量:只能进行初始化,不能再被赋值

            成员变量: 初始化的时机有两种

                     声明时同时初始化

                     在构造器中初始化  

            局部变量:使用前初始化即可

    (3)修饰方法: 不能被重写,意义在于: 可以避免某些子类"不经意"的重写       

 

static:英文含义:静态

1、修饰成员变量

   (1)修饰的成员变量,不属于对象的数据结构

   (2)静态变量属于类的,通常使用类名去调用

   (3)静态变量与类的信息一起存在方法区中,只存在一份,是对象的公共资源

2、修饰方法

   (1)通常的方法都是与具体对象有关系,即对象的方法(行为)

   (2)如果是static方法则与对象毫无关系,是类的方法,通常用类名去调用,常常与参数有关系

   (3)static方法内因为无法使用this关键字,因此不能直接访问非静态成员变量和方法

   (4)static方法的作用一般都用于设计成"工具方法"和"工厂方法"           

    如:   Arrays.sort(数组名);

           Math.random();

           Math.sqrt(参);

           Math.abs(参);

           Math.sin(参数);

 3、static修饰代码块

       static{

         代码逻辑

       }

              静态块存储在方法区中,只加载一次,与对象无关。

             执行时机为加载类的信息期间,可以理解为在实例化之前

      作用:通常用于加载程序中所需要的静态资源:如:图片,音频,视频等       

           非静态代码块与静态代码块,成员变量,方法都是类的成员

     {

     }

   运行时机:在实例化之前执行,每次实例化之前都会执行一次      

 

常量

     一般都是一些特殊值。

     一般都使用成员变量,修饰词为public static final

      声明时必须初始化

     命名规则: 字母全都大写

       如:   Math.PI

 

设计模式之单例模式

          需求:在程序中的任何地方,我们想要获取某一个类的唯一对象。

          我们称之为类的单例   

     Singleton

     (1)提供一个私有的静态的本类型的成员变量

     (2)构造器私有化

     (3)提供公有的静态的方法获取本类中创建的实例。

      饿汉写法:  加载期间就实例化对象

      public class Singleton{

      private static Singleton instance = new Singleton();

      private Singleton(){}

      public static Singleton getInstance(){

      return instance;

      }

     }

     懒汉写法:  调用方法时才创建对象

     public class Singleton{

      private static Singleton instance ;

      private Singleton(){}

      public static Singleton getInstance(){

      if(instance ==null){

      instance = new Singleton();

      }

      return instance;

      }

     }                           

 

抽象类:

   因为继承的关系,子类的功能可以越来越具体,相对来说,父类

  更加一般化,通用化。因为父类封装了子类的共同行为,所以,

 在定义时,我们可以定义方法的逻辑。有的时候,在父类中无法完成

 子类的功能需求,此时,不如不写,即不写方法体,代码简单化。

 但是此方法必须使用abstract修饰,那么此类型也必须使用abstract

 修饰,即抽象类

 

1、抽象方法与抽象类

  1)用abstract修饰的方法,不需要写方法体,但是得用分号来结尾

  2)有抽象方法的类,必须使用abstract声明(修饰)

2、抽象类不能实例化

  1)  抽象类不能创建对象,没有意义

  2)  抽象类可以提供构造器

  3)  抽象类中可以没有抽象方法

  4)  abstract和final不能同时修饰一个类型

3、继承抽象类

  1)若一个类继承了抽象类,那么这个类必须重写(实现)抽象类的所有抽象方法

  2)若一个类没有实现抽象类的所有抽象方法, 那么这个类必须使用abstract修饰

4、抽象类的意义:

   1)给不同的子类定义一个父类

   2)抽象类可以封装子类的共同特征与共同行为

   3)虽然子类方法可能有不能的实现逻辑,但是

         方法的定义一致。

 

静态方法不能直接访问非静态成员变量和方法



非静态方法用对象调用,静态方法用类名调用

单例模式

加载类的信息期间执行代码块;

加载类的信息期间执行静态代码块;

每次实例化对象之前执行非静态代码块

猜你喜欢

转载自blog.csdn.net/K_KingoneTen/article/details/81435570