day09-2学习过程笔记

本文深入探讨了抽象类和接口的概念,包括它们的特点、使用场景和设计原则。讲解了抽象类与接口在Java中的语法,如何实现多态,以及它们之间的区别。通过案例练习加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.抽象类(掌握)

  • 引入:
  • 动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的
  • 我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类
  • 特点:
  • 抽象类和抽象方法必须用abstract关键字修饰
  • 抽象类中不一定有抽象方法,但是有抽象方法的类必须定义为抽象类
  • 抽象类不能自身实例化,因为它不是具体的:
    //Animal是抽象的; 无法实例化
    //Animal a = new Animal();
    

    抽象类有构造方法,但是不能实例化,那么构造方法的作用是什么呢?
    答:是给子类用的,用于子类访问父类数据的初始化

  • 抽象类是靠具体的子类实现实例化的(是多态的方式):
    Animal a = new Cat();
  • 抽象的子类
    a:如果不想重写抽象方法,该子类必须是一个抽象类
    b:重写所有的抽象方法,这个时候子类是一个具体的类
abstract class Animal {	//抽象类的声明格式
	//抽象方法
	//public abstract void eat(){} //空方法体,会报错,因为抽象方法不能有方法体
	public abstract void eat();	   //正确
	
	public Animal(){}
}

2.抽象类的成员特点:

  • 构造方法:有,用于子类访问父类数据的初始化
  • 成员变量:可以有变量,也可以有常量
  • 成员方法:可以有抽象方法,也可以有非抽象方法
  • 抽象方法:强制要求子类做的事情
  • 非抽象方法:子类继承的事情,提高代码复用性

3.抽象类案例练习

  • 猫狗案例练习:2019-08-19com2019-08-19com.aniabstract
  • 员工案例练习:2019-08-19com.empabstract // 重点

4.抽象类的几个小问题

  • 一个类如果没有抽象方法,却定义为了抽象类,有什么用?
    为了不让创建对象
  • abstract不能和哪些关键字共存
    会报错:非法的修饰符组成
  • final 冲突
    final修饰的不能被重写,abstract修饰又要让子类重写,自然会冲突
  • private 冲突
    方法用abstract修饰是为了让子类重写,加private子类看不到还怎么重写?
  • static 无意义
    假如存在static abstract void show();
    那么我们直接用类名调用它,它没有方法体,调用它也就是什么都没做,所以这么调用无意义

5.接口(掌握)

  • 引入:
    回顾猫狗案例,它们仅仅提供一些基本功能
    猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的
    这种额外的功能,java提供了接口表示。
  • 特点:
    //接口并不是实际意义上的一个类,它仅仅表示功能的扩展
  • 接口用关键字interface修饰,格式:nterface 接口名 {}
  • 类实现接口用implements修饰,格式:class 类名 implements 接口名 {}
  • 接口是抽象的,自身不能实例化
    但可以按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态
  • 接口的实现类
    抽象类实现接口(意义不大)
    具体类实现接口,那么这个类必须重写接口中的所有抽象方法

6.接口的成员特点:

  • 构造方法:没有构造方法

    记:
    《所有的类都默认继承自Object类》–也就是说,当你没有父类时,你的父类就是Object类
    所以,实现接口的具体类要访问父类构造方法时,会去访问Object类的无参构造方法,不必担心没有父类构造方法

  • 成员变量:只有常量,默认接口中的成员变量定义中,都隐含了修饰符public static final

  • 成员方法:只有抽象方法,默认接口中的成员方法定义中,都隐含了修饰符public abstract(因为,接口中的方法不能带主体)

7.类与类,类与接口,接口与接口

  • 类与类
    继承关系,只能单继承,可以多层继承
  • 类与接口
    实现关系,可以单实现,也可以多实现
    还可以在继承一个类的同时,实现多个接口 //注意,实现多个接口时,对应的接口实现对应的方法
  • 接口与接口
    继承关系,可以单继承,也可以多继承

8.抽象类和接口的区别(自己补齐)

  • A:成员区别

  • 抽象类:
    成员变量:可以有变量,也可以有常量
    构造方法:有
    成员方法:可以有抽象方法,也可以有非抽象方法

  • 接口:
    成员变量:只有常量
    构造方法:没有
    成员方法:只有抽象方法

  • 关系区别:(见第7点)

  • 类与类

  • 类与接口

  • 接口与接口

  • 设计理念不同

  • 抽象类:被继承体现的是:”is a”的关系,抽象类中定义的是该继承体系的共性功能

  • 接口:被实现体现的是:”like a”的关系,接口中定义的是该继承体系的扩展功能

9.接口案例练习:

  • 学生和老师,加入抽烟接口:2019-08-19com.perinterface
  • 运动员和教练,加入学习英语接口:2019-08-20motion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值