复习第二天接口

继承关系下构造方法的访问特点

清心咒 : 子类对象要加载优先加载父类对象;  //子类要加载优先加载父类 -> 也对
        
    构造方法的小秘密:
        1. 每一个构造方法的内部第一句代码 默认隐藏着一句 :  super();
        2. 在构造方法内调用其他构造方法的   这句代码必须是构造方法的第一句有效代码
        3. super(实参) : 调用父类的含参构造
        4. 如果你在构造方法的第一句代码中调用了其他任何一种构造方法,默认赠送的super()就不送了
        5. 一个构造方法内不可以出现2次调用其他构造方法
        6. 一个构造方法内不可以调用自己
        7. 子类中的构造方法必须有一个构造是用来加载父类对象     

this 和 super 的使用

        this: 本类对象的引用
        this.成员变量 : 打破局部位置的约束,强制访问本类成员位置上的变量
        this.成员方法() :  -> 无意义的 所有的方法都是成员方法
            每一次调用本类中的方法,其实前方都隐藏着 this.
        this() : 调用本类的无参构造方法
        this(实参) :调用本类的含参构造方法
​
        super: 本类父类对象的引用
        super.成员变量 : 打破本类位置的约束,强制访问本类父类成员位置上的变量
        super.成员方法() :  打破本类位置的约束,强制调用本类父类的成员方法
        super() : 调用本类父类的无参构造
        super(实参) : 调用父类的含参构造

继承的好处和弊端

继承的好处: 
    1.把子类的共性(共同的属性和共同的行为)抽取到父类中 -> 提高了代码的复用性 // 从子类往父类看
    2.父类约束子类的行为 //从父类往子类看
        
继承的弊端:
    高内聚低耦合
        内聚: 自己独立完成功能的能力
        耦合: 依赖关系
    需要继承的时候果断继承,继承利大于弊! 00

继承知识点的题型讲解

抽象类

抽象类 : 比类更抽象的类叫抽象类
    原因: 抽象类中可能有抽象方法
    抽象类为什么存在 : 严格约束子类的行为
​
    abstract : 抽象的 adj.
        可以用来修饰类: 类变抽象类
        可以用来修饰方法 : 方法变成抽象方法
    
格式:
    public abstract class 类名{
​
    }

抽象方法

抽象方法 : 没有方法体的方法
​
格式:
    public abstract 返回值类型 方法名(形参列表);
​
作用:
    约束子类的行为,要求子类实现抽象方法!! 
            (或者子类自己变成抽象类 抽象方法只能在抽象类或者接口中)

抽象类的成员

        //自定义常量 : 可以有,也可以有多个
        1. 成员变量 : 可以有,也可以有多个
        2. 构造方法 : 可以有,也可以有多个
        3. 普通成员方法 : 可以有,也可以有多个
        4. 静态成员方法 : 可以有,也可以有多个
        5. 抽象方法 : 可以有,也可以有多个

抽象类的使用

虽然抽象类中有构造方法但是抽象类却不可以直接创建对象!!
    
第一种使用方式: //最常用
    1. 找一个子类,让子类继承抽象父类
    2. 在子类中重写父类中的所有抽象方法.选择性的重写父类的普通方法
    3. 在测试类中,创建子类的对象,使用子类对象调用 子类重写的抽象方法或者父类的非私有非抽象的功能
    
第二种使用方式:
    1. 找一个子类,让子类继承抽象父类
    2. 让子类自己也变成抽象类
    3. 让子类的子类去实现父类和爷爷类中的所有抽象方法
    4. 创建子类的子类对象,调用功能

接口 interface

接口 interface : Java 三大引用数据类型中的一种;
​
老程序员的常识: 如果一个抽象类中只有抽象方法,那么我们不会去定义类而是去定义接口

接口的思想

1. 对外提供规范 -> 规范的特别好,带来很多便捷
2. 对子类的功能提供了功能的拓展 
​
 
对外提供规范最重要的因素 : 公开! -> public : 接口板块中最为重要的关键字!

接口的定义格式

格式:
    public interface 接口名{//接口名 : 和类的命名规范一致 大驼峰
        
        //定义一个接口也是定义一种引用数据类型
        
    }

接口和类之间的关系

类与类之间 : 继承关系 -> 单一继承,多层继承
类与抽象类之间 : 继承关系 -> 单一继承,多层继承
​
抽象类/类与接口之间 : 实现关系 (implements) -> 多实现
接口与接口之间 : 继承关系 -> 多继承
​
interface Uncle1Mother{
    
}
​
interface Uncle1Father{
​
}
//接口于接口之间是继承关系,多继承
interface Uncle1 extends Uncle1Mother,Uncle1Father{
    
}
​
interface Uncle2{
​
}
​
class Fu{
    
}
​
//实现类 多实现
//一个类继承一个父类实现多个父接口的格式
class Son extends Fu implements Uncle1,Uncle2 {
    
}

final

final  : 最终的 adj.
    修饰 : 类 class , 成员变量 , 成员方法 , 局部变量
    
final 修饰的类 :  没有子类
final 修饰成员变量 : 不能修改 -> 常量
    自定义常量 : 
        标准格式 : public static final 数据类型 常量名 = 初始化值;//自定义常量一定要给值
        //自定义常量的命名方式: 全部大写,多个单词之间用_分隔 -> JAVA_HOME
final 修饰成员方法 : 不能被重写 
final 修饰局部变量 : 不能修改 -> 变成了局部位置的常量 //实时final
​
adj : public(权限修饰符),static,final,abstract 
    形容词的先后顺序是可以修改的
    
    static public  void main(String[] args) {
        
    }

JDK_8版本之前的接口的成员(重要)

    JDK8版本之前的接口成员: 可以什么都没有
        自定义常量 : 接口中没有成员变量,定义出来的成员变量都是自定义常量
            接口中的成员变量默认被  public static final 修饰 -> 一定是自定义常量
        抽象方法 : 可以有,也可以有多个
            接口中的成员方法默认被 public abstract 修饰
​
    不可以有的:
        1. 成员变量 : 接口中不可以有成员变量
        2. 构造方法 : 接口中不可以有构造方法 -> 不能直接创建接口对象
        3. 普通成员方法 : 接口中不可以有成员方法
        4. 静态成员方法 : 接口中不可以有静态成员方法

JDK_8版本的接口的成员(理解)

    JDK8版本的接口成员: 可以什么都没有
        自定义常量 : 接口中没有成员变量,定义出来的成员变量都是自定义常量
            接口中的成员变量默认被  public static final 修饰 -> 一定是自定义常量
        抽象方法 : 可以有,也可以有多个
            接口中的成员方法默认被 public abstract 修饰
        -------------------------------新增成员--------------------------- 
        默认方法 : 可以有多个
            格式: 
                public default 返回值类型 方法名(形参列表){
                    //方法体
                }
            默认方法默认被 public 修饰
                1. 默认方法可以选择性重写(实现类可以不重写父接口中的默认方法)
                2. 默认方法有一种场景下是必须重写的 -> 当多个父接口中出现了相同声明的默认方法,实现类必须重写父接口中的默认方法!
                
            默认方法的调用方式: 使用实现类对象调用接口中默认方法    
            
       静态方法 : 可以有多个     
             格式: 
                public static 返回值类型 方法名(形参列表){
                    //方法体
                }   
            静态方法默认被 public 修饰
            
            静态方法就没有重写的概念!
            
            静态方法的调用格式 : 只能用接口名调用!!
​
    不可以有的:
        1. 成员变量 : 接口中不可以有成员变量
        2. 构造方法 : 接口中不可以有构造方法 -> 不能直接创建接口对象
        3. 普通成员方法 : 接口中不可以有成员方法

JDK_9版本的接口成员(了解)

    JDK9版本的接口成员: 可以什么都没有
        自定义常量 : 接口中没有成员变量,定义出来的成员变量都是自定义常量
            接口中的成员变量默认被  public static final 修饰 -> 一定是自定义常量
        抽象方法 : 可以有,也可以有多个
            接口中的成员方法默认被 public abstract 修饰
        默认方法 : 可以有多个
            格式: 
                public default 返回值类型 方法名(形参列表){
                    //方法体
                }
            默认方法默认被 public 修饰
                1. 默认方法可以选择性重写(实现类可以不重写父接口中的默认方法)
                2. 默认方法有一种场景下是必须重写的 -> 当多个父接口中出现了相同声明的默认方法,实现类必须重写父接口中的默认方法!
                
            默认方法的调用方式: 使用实现类对象调用接口中默认方法    
            
       静态方法 : 可以有多个     
             格式: 
                public static 返回值类型 方法名(形参列表){
                    //方法体
                }   
            静态方法默认被 public 修饰
            
            静态方法就没有重写的概念!
            
            静态方法的调用格式 : 只能用接口名调用!!
                
        -------------------------------新增成员--------------------------- 
        私有方法:
            
​
    不可以有的:
        1. 成员变量 : 接口中不可以有成员变量
        2. 构造方法 : 接口中不可以有构造方法 -> 不能直接创建接口对象
        3. 普通成员方法 : 接口中不可以有成员方法

如何使用接口

接口中是没有构造方法的,所以不可以创建接口对象
​
1. 创建一个普通类 (接口的实现类)
2. 让实现类实现父接口 (implements)
3. a. 要么让实现类重写父接口中所有的抽象方法
   b. 要么让实现类变成抽象类,让实现类的子类重写接口中的抽象方法
4. 在测试类,创建实现类的对象,并使用实现类的对象调用重写后的方法   

猜你喜欢

转载自blog.csdn.net/m0_70793154/article/details/127166261