Java面向对象总结 day8

面向对象 总结

构造方法

构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载。

重点

java中构造方法的使用:
    1.跟在关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参
    2.跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参
    this或super调用构造方法只能出现在构造方法中,而且必须出现在第一行,所以一个构造方法中第一行只能为this或super调用构造方法,两者不能同时调用构造方法出现
java中构造方法的作用
    1.为了初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的
    2.通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态
    (参数签名:参数的类型,参数个数和参数顺序)
    3.创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类成员属性;

面向对象三大特性

继承

继承的条件
  • 拥有一个父类
  • java只支持单继承
  • 若要多个继承只能一个接着一个继承 比如:A→B→C
继承的作用

子类拥有父类所有的属性和方法

extends关键字

extends 格式:class 子类 extends 父类{ }

super关键字

super 格式 super. super() 实现对父类成员的访问(构造方法、方法、成员变量)

方法重写

重写父类的方法

  • 一定要发生继承关系
  • 参数列表要一致
  • 返回类型要一致

Tips:

可以用@override注解判断是否重写

Object

Object 是所有类的基类、超类、父类

封装

static关键字

public : 外界一定是通过该方法获取当前类的实例对象 所以对外一定要可见

static : 构造器都私有了 外部肯定无法获取到当前类的实例对象 所以只能用static修饰 属于类的 可以通过类名调用 不加static要通过对象调用 对象没有
返回值 : 当前类的实例

权限修饰符
能否被访问 本类 同包下的子类 同包下的无关类 异包下的子类 异包下的无关类
public
protected
默认的(不写)
private

Tips:

可以修饰变量、方法、类

单例模式

单例模式:书(大话设计模式、设计模式之禅、ODD)

什么是单例: 一个类只能产生一个实例对象 *

什么场景下使用单例:windows 任务管理器 Spring SessionFactory

如何编写?

1.构造器私有

2.对外提供过去对象的方法

3.声明一个static的成员变量 类加载的时候创建当前单例对象 4:在获取对象方法中返回成员变量的值

饿汉式
  • 缺点: 不能做到延迟加载
  • 优点: 天然线程安全
懒汉式
  • 线程不安全
  • 优点:能够做到延迟加载

多态

多种形态 前提:父类 a = new 子类()多态:a.父类方法() 编译看左边(父类中是否存在此方法),运行看右边(子类中是是否存在此方法)。

构成多态的条件

  • 继承关系
  • 父类变量指向了子类对象
  • 一定要有方法的重写

Tips:

父类引用其子类对象,可以看成是类型自动转换,由小类型转换到大类型

类型转换

自动转换

父类型 变量名 = 子类对象; [new 子类对象|子类对象的变量]

强制转换

子类型 变量名 = (子类型)父类变量; [事先确定了父类变量中实际存储的对象是什么类型] 否则会出现ClassCastException类型转换异常

类的加载顺序

三种代码块

重点如下

{}  代码块:
    局部代码块:声明在方法中的代码块
            缩减局部变量的生命周期 提高内存是使用率
    成员代码块:初始化块
            声明在方法外 类中的代码块
            初始化块在类加载的时候是不会执行的
            在创建对象之前会被调用(对于对象中的一些初始进行初始化操作)
    静态代码块:
        声明在类中 方法外 且使用static修饰
        类加载的时候就会被加载 并且只加载1次  静态内容
        
   
  
  类中的执行顺序:
  1:首先执行静态内容(加载)  静态代码块 
  2:初始化块
  3:构造器
  
    
  类加载:
     使用当前类中的静态方法、静态变量
    创建当前类的实例对象

你可能感兴趣的:(Java面向对象总结 day8)