JAVASE23天从入门到精通_Day08

抽象类
抽象类 : 比类更为抽象的类叫抽象类 /abstract修饰的类叫抽象类

格式:
    public abstract class 类名{

    }
抽象类的成员
	抽象类的成员:
        // 抽象类中可以什么都没有!!只要被abstract修饰.那么类就是抽象类
        1. 成员变量 : 可以有
        自定义常量(final修饰的变量就是常量) : 可以有
        2. 构造方法: 可以有
        3. 成员方法: 可以有
        4. 静态成员方法: 可以有
        5. 抽象方法 : 可以有

        结论: 抽象类比普通类多一个抽象方法!!(抽象方法必须存在于抽象类中)
抽象方法的格式
格式:
	权限修饰符 abstract 返回值类型 方法名(形参列表);

注意 : 
	1. static 关键字 不可以和 abstract 一起使用!!
    2. 抽象方法在抽象类中可以有多个!
抽象类的使用步骤
1. 准备一个普通类,让此类去继承抽象父类
2. 
	方案1: 在子类中重写父类中所有的抽象方法
	方案2: 把子类也变成抽象类
	//抽象方法必须存在于抽象类中
3. 	
    方案1 : 创建子类对象,并调用抽象类中成员或者重写后的抽象方法
    方案2 : 还是要准备一个普通类重写子类中继承下来的抽象方法,再创建子类的子类对象
    
    注意:
        1. 抽象类虽然有构造方法但是不可以创建抽象类的对象    

在这里插入图片描述

final 关键字
final : 修饰符 -> 最终的

作用的地方:: 最终的类 ->final修饰的类没有子类
	成员变量 : 最终的变量 ->final修饰的成员变量不能改变 -> 自定义常量
		自定义常量: 1. 必须赋值 2. 加上 static 关键字 3. 常量名: 全部大写,多个单词之间用 _ 分割
			//JAVA_HOME
			格式 :  public static final 数据类型 变量名 = 初始化值;
	成员方法 : 最终的方法 ->final修饰的成员方法不能重写
	局部变量 : 最终的局部变量 ->final修饰的局部变量不能改变 -> 局部常量(实时final)
接口概述
接口 : interface -> 比抽象类更抽象的类叫接口 (接口是一种特殊的类/接口也是一种引用数据类型)
    
抽象方法不但可以在抽象类中还可以存活于接口中!!    
    
使用接口的场景 : 如果一个抽象类中全都是抽象方法,那么就可以不定义抽象类,而是定义接口!
    	(如果一个类中全都是抽象方法,就可以把这个类改定义成接口!)
接口的思想
生活中的接口 : USB接口,Type-c接口,API(Application Programming Interface) 应用程序编程接口....
    
接口的主要思想 不是 连接! 
    1. 而是提供规范!!  
    2. 而是功能拓展!!
    
既然是规范,最重要的一个环节是 公开 !!
    对应代码 : 接口中的成员最重要的关键字  : public !
接口的定义格式
格式:
    public interface 接口名{//接口名的命名规范和类名一致!!

    }
接口和类的关系
类和类的关系 : 继承 和 没有关系 -> extends -> 单一继承多层继承

类和抽象类的关系 : 继承 和 没有关系 -> extends -> 单一继承多层继承
	//抽象类一般都是作为父类存在

接口和类的关系 : 实现 和 没有关系 -> implements -> 多实现(叔叔,干爹)
	//接口一般都是作为父接口存在
    
接口和接口的关系 : 继承 和 没有关系 -> extends -> 多继承


格式:
	//父接口
    public interface InterFu{

    }

	public interface InterDie{

    }

    public class Fu{

    }

	//子类继承父类实现多个接口
    public class Zi extends Fu implements InterFu,InterDie{//多实现

    }

	//接口和接口之间是多继承
	public interface InterA{

    }
	
	public interface InterB{

    }

	public interface InterC extends InterA,InterB{

    }

使用接口的场景 : 如果一个抽象类中全都是抽象方法,那么就可以不定义抽象类,而是定义接口!

JDK8之前版本接口的成员和使用(重要)
    JDK8之前版本接口的成员和使用(重要):
        成员变量 : 不可以有
        自定义常量 : 可以有
            接口中的成员变量默认被 public static final 所修饰 变成 自定义常量!!
        构造方法 : 不可以有 -> 肯定不能创建接口对象
        普通方法 : 不可以有
        抽象方法 : 可以有
            接口中所有的成员方法默认被 public abstract 修饰 变成 抽象方法!!
            
    结论 : JDK8之前接口中只允许有 自定义常量  和 抽象方法!!  
        
如何使用接口:
	1. 创建一个普通类(实现类),实现父接口
	2. 在实现类中要么重写父接口中所有的抽象方法/要么把实现类自己也变成抽象类(不推荐)
	3. 在使用接口的地方,创建实现类对象:
    	实现类对象可以调用重写后的抽象方法;
    	实现类对象可以调用接口中的自定义常量(更推荐使用接口名直接访问自定义常量)
JDK8版本接口的成员和使用(掌握)
JDK8版本的接口成员和使用:
	1. 自定义常量
	2. 抽象方法
	-----新增-----
    3. 默认方法
    	格式:
            public default 返回值类型 方法名(形参列表){
				方法体;
                return;
            }
		默认方法默认被 : public 修饰
        默认方法,实现类可以选择性重写!!(当实现类实现的多个父接口中有同名的默认方法,实现类必须手动重写父接口中的默认方法)
       	默认方法的调用 : 实现类对象调用默认方法
    4. 静态方法
    	格式:
			public static 返回值类型 方法名(形参列表){
				方法体;
                return;
            }
		静态方法默认被: public 修饰
		静态方法,实现类不能重写!!
        接口中的静态方法 只能使用接口名直接调用 ,不可以使用实现类对象调用(特殊!!)
JDK9版本接口的成员和使用(了解)
JDK9版本的接口成员和使用:
	1. 自定义常量
	2. 抽象方法
	3. 默认方法
   	4. 静态方法
   	-----新增-----
    5. 私有方法(只为接口中的默认方法和静态方法服务)   外界不能访问
        普通私有方法
        	格式:
				private 返回值类型 方法名(形参列表){
                    方法体;
                }
        静态私有方法(专门服务静态方法的)
            格式:
				private static 返回值类型 方法名(形参列表){
                    方法体;
                }
接口和抽象类的区别
接口抽象类
成员变量没有
自定义常量有(public static final)
构造方法没有有(不能创建对象)
普通方法没有
抽象方法有(public abstract)
默认方法有(JDK8开始)没有
静态方法有(JDK8开始)
使用上:
	1. 和实现类的关系 --> 接口是 实现  / 抽象类是 继承
	2. 实现类都需要重写父接口/抽象父类中所有的抽象方法 或者 把实现类自己变成抽象类;
	3. 实现类选择性重写父接口中的默认方法 / 实现类选择性重写抽象父类中的普通方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值