多态
多态是在继承或者实现情况下的一种现象,存在方法重写,具体表现为对象多态、行为多态,属性没有多态
优点:
1.在多态形式下,等号左右两边松耦合,更便于修改和维护
2.定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利
缺点: 不能使用子类独有的功能
解决方案:向下转型为具体子类对象
1.使用父类接收子类对象后,无法调用子类独有的方法,若想调用需要强转
2.引用类型中需要使用instanceof关键字进行判断是否为该类型,若是再转换
Final
修饰类: 该类不能被继承
修饰方法: 该方法不能被重写
修饰变量: 该变量只能被赋值一次,赋值完后不能被修改
Final修饰基本类型和引用类型的变量区别
修饰基本类型变量,变量存储的数据不能被改变
修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象中的内容是可以被改变
抽象类
1.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
2.抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
3.一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
4.类该有的成员(成员变量、方法、构造器)抽象类都可以有
public abstract class A {
public abstract void test();
}
使用抽象类的好处
使用抽象类做父类中,抽取相同的代码
模板方法设计模式
一个功能的完成需要经过一系列步骤,这些步骤是固定的,但是中间某些步骤具体行为是待定的,在不同的场景中行为不同
public class Demo {
public static void main(String[] args) {
Person p = new Teacher();
p.work();
}
}
abstract class Person{
public final void work(){
System.out.println("干早饭");
doSomething();
System.out.println("干晚饭");
}
public abstract void doSomething();
}
class Student extends Person{
@Override
public void doSomething() {
System.out.println("我是学生");
}
}
class Teacher extends Person{
@Override
public void doSomething() {
System.out.println("我是Teacher");
}
}
接口
1.成员变量(接口中的成员变量都是常量, 默认是被public static final修饰的)
2.成员方法(接口中的成员方法都是抽象方法, 默认是被public abstract修饰的)
3.接口中不能有构造方法和代码块
JDK8开始,接口中增加了新的方法
使用default修饰,使用实现类的对象调用
使用static修饰,必须使用当前接口名调用
使用private修饰,JDK9开始才有,只能在接口内部被调用
都会被public修饰
常量
使用了 static final 修饰的成员变量就被称为常量
作用:通常用于记录系统的配置信息
枚举
修饰符 enum 枚举类名{
枚举项1 , 枚举项2, ... ;
其他成员…
}