• 面向对象二


    一、多态

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

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

      注意:

      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、类既继承类也实现接口,类在前,接口在后

  • 相关阅读:
    npm配置国内源方法
    数据库—事务—隔离级别
    Mybatis—日志
    Mybatis—动态 SQL
    Mybatis—mapper.xml配置文件
    declare命令
    shell杂项
    流程控制语句
    第一篇博客
    Linux 命令[2]:mkdir
  • 原文地址:https://www.cnblogs.com/zwcnblog/p/9873800.html
Copyright © 2020-2023  润新知