面向对象二

一、多态

  多态即是同种类型,多种形态。

  关键就是:在继承关系中,将子类对象赋给父类的变量。

  注意:

  1、方法: 是从等号右边来判断,就近原则,会优先从子类中调用,如果没找到,会继续向上父类中去逐级去寻找,直到找到为止,然后运行。

  2、属性:没有多态,会调用当前变量数据类型的属性,不会从子类调用。

  1.1、super

  指当前对象的父类的对象

  使用场景1:在子类中调用父类的属性和方法(常用于初始化父类字段)

  使用场景2:在子类构造方法中调用父类构造方法(必须在第一行)

  注意:

  1、子类都会调用父类的构造器,如果没有显示调用,则会默认的隐式调用父类的无参构造器,如果显示调用了父类的构造器,就不会自动隐式调用了。

  2、实例化子类对象时,会从最高父类的构造器开始执行,然后逐级向下执行子类的构造器。

  1.2、引用类型转换

  1、子类型转换成父类型会隐式类型转换。

  2、父类型转换成子类型需要强制类型转换,需要先判断类型,否则可能报ClassCastException,语法:A instanceof B

  1.3、final关键字

  final不能修饰构造器和代码块。

  修饰类:该类不能被继承

  修饰实例变量和类变量:定义的同时必须初始化,值不能被修改。

  修饰局部变量:定义时可以不初始化,使用前赋值即可,值也是不能被修改的。

  修饰方法:该方法不能被重写。

 

二、单例模式

  是java中的一种设计模式,即是设计的类只有一个对象。

 

  恶汉模式:类加载时就创建。(常用)

  优点:效率高,且线程安全。缺点:占用资源。

/**
 * 单例模式:
 * 饿汉模式
 */
public class Singleton {
    private static Singleton instance = new Singleton();
    /**
     * 私有化构造器
     */
    private Singleton(){
        
    }
    /**
     * 通过该方法获取实例对象
     */
    public static Singleton getInstance(){
        return instance;
    }
}

 

  懒汉模式:使用时,创建实例。

  优点:节约资源。缺点:效率低,线程不安全。

/**
 * 单例模式: 懒汉模式
 *
 */
public class Singleton2 {
    private static Singleton2 instance = null;

    private Singleton2() {

    }

    public static Singleton2 getInstance() {
        if (instance == null) {// 判断是否存在该实例
            instance = new Singleton2();
        }
        return instance;
    }
}

 

三、枚举

  用于封装一些常量,主要用于一些比较固定的数据。如:性别、星期、段位。

  语法:

  enum 枚举名{

         字段;//字段间使用”,”隔开

         普通方法;

         构造方法;//private修饰

  }

 

  注意:

  1、枚举都会隐式继承Enum,不能显示写出这个继承关系

  2、每个字段是都是一个该枚举对象

  用法一:最常用

public enum Gender {

    MAN,WOMAN,YAO;
    
}

  用法二:不常用

public enum Gender {

    MAN("男"),WOMAN("女"),YAO("人妖");
    
    private String gender;
    
    private Gender(String gender){
        this.gender=gender;
    }
    
    @Override
    public String toString() {
        return this.gender;//重写toString方法
    }
    
}

 

四、抽象类

  父类抽象出每个子类的共有方法,每个子类对方法的实现都不相同。

  语法

  abstract class 类名{

                字段;

                构造方法;

                普通方法;

                抽象方法//没有方法体 abstract修饰

  }

  注意:

  1、抽象类有构造方法,但是不能实例化。

  2、子类必须重写父类的所有抽象方法(除非子类也是抽象类)

 

五、代码块

  静态代码块:static修饰,在类加载时执行。(这个有时用,其他基本不用)

  构造代码块:写在类中,在每个构造方法中复制一份,每次调用创建对象都会执行代码块。

  局部代码块:在方法类,一般与for、if等连用,单独写没有意义。

六、接口

  语法:

  interface 接口名{

         全局常量;(public static final 修饰)

         抽象方法;(public abstract 修饰,没有方法体)

         静态方法;(static修饰,有方法体)//JAVA8新特性

         默认方法;(default 修饰,有方法体) //JAVA8新特性

  }

  注意:

  1、类与类,单继承,多重继承

  2、类与接口,多实现

  3、接口继承接口,可以多继承

  4、类既继承类也实现接口,类在前,接口在后

 

posted @ 2018-10-29 22:26  爱吃辣子鸡  阅读(103)  评论(0编辑  收藏  举报