一、多态
多态即是同种类型,多种形态。
关键就是:在继承关系中,将子类对象赋给父类的变量。
注意:
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、类既继承类也实现接口,类在前,接口在后