继承与多态

类的定义

  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关键字

访问权限控制

屏幕截图 2020-09-15 102905