继承与多态

类的定义

  1. 先定义变量
  2. 后定义方法
    1. 公有方法
    2. 保护方法
    3. 私有方法
    4. getter/setter方法

继承

就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。

class 父类 {     ...      }class 子类 extends 父类 {     ...      }

继承后的特点

super与this

子类默认的空构造方法默认调用super(), 也就是父类的默认构造函数, 如果父类没有无参构造函数, 则编译会出错. 这个时候需要手动调用父类的构造函数()

class Father{    public Father(int i) {}}class Son extends Father{    public Son(){ super(1); }}

如果用this()或者super() 调用构造器, 则必须在构造函数内的第一行调用(必须保证父类在子类之前初始化)

特点

抽象类

public abstract class Animal {         public abstract void run(); }

接口

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)

public interface 接口名称 {         // 抽象方法         // 默认方法         // 静态方法         // 私有方法      }class 类名 implements 接口名 {         // 重写接口中抽象方法【必须         // 重写接口中默认方法【可选】         } 

默认方法

public interface LiveAble {         public default void fly(){                  System.out.println("天上飞");               } }

静态方法

public interface LiveAble {         public static void run(){                  System.out.println("跑起来~~~");               } }

私有方法

多实现

class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {         // 重写接口中抽象方法【必须】         // 重写接口中默认方法【不重名时可选】    } 

抽象类与接口

抽象类是is-a关系, 是模板式设计 接口是 can-do关系, 是契约式设计

优先定义接口, 避免直接使用继承

多态

父类类型 变量名 = new 子类对象; 变量名.方法名();

多态的好处

final关键字

访问权限控制

访问权限控制符任何地方包外子类包内类内
public
protected×
default××
private×××