Java基础-抽象类和接口的学习

it2026-02-27  4

1.抽象类

1)概念
在一个类中,将某个功能给出一个声明(抽象方法:没有方法体的方法),那么该类定义为抽象类 举例: 动物--->本身是一个抽象的事物 给出能吃的功能--->将eat方法:没有方法体{} 关键字:abstract:修饰类、修饰方法:抽象的意思!
2)抽象类的注意点:
1)如果一个类中,有抽象方法,那么该类一定是抽象类;抽象类中一定是抽象方法吗?,也可以有非抽象方法 2)抽象类如何实例化呢? 抽象类如何创建对象 抽象类不能直接实例化! ,通过具体的子类进行实例化 格式: 父类名 对象名 =new 子类名() ; 抽象类多态 3)抽象类的子类: 子类要么具体类,要么抽象类 子类是具体类,直接可以抽象类多态的形式实例化! 子类是抽象类,应该还要提供更最具体的子类,否则都无法实例化(没有意义!) 4)在抽象类中定义抽象方法的时候,那么抽象方法必须带上修饰符:abstract,不能省略!
3)抽象类的本质
强制子类必须完成的事情!
4)抽象类的特点
1)成员变量: 既可以定义常量,也可以定义变量 2)成员方法: 即可定义抽象方法(必须要有abstract),也可以定义非抽象方法 3)构造方法: 还是继承关系,构造方法:对数据进行初始化---->分层初始化!
5)实例化
有抽象方法的类一定是抽象类,那么如果一个类中没有抽象方法,这个类可以不可以定义为抽象类呢? --->可以,意义是什么? --->意义:就是让当前类不能够直接实例化(实例化:创建对象) -->那么如何实例化呢? 它会提供一个静态功能,返回值就是该类本身! (Java中一种设计模式) 举例: Calendar:常用类 ---日历类 是一个抽象类 (Java提供一个日历类) 在当前类提供了一个静态功能 public static Calendar getInstance()
6)abstract关键字不能和哪些关键字共存
不能和final一块使用: final修饰成员方法:方法不能被重写,但是abstract修饰的方法,强制类完成的事情! 不能和private一块使用: private只能在类中访问! 被static修饰的方法直接使用类名调用,---->但是抽象方法又需要让子类重写(静态方法算不上方法重写) 方法重写注意事项: 子类继承父类,子类重写父类的方法必须保证访问权限足够大,使用public修饰(要么跟父类的修饰符保持一致)

2.接口

1)概念
interface 接口名{ ... } 接口中的方法只能是抽象方法,不能有方法体 接口的命名规则:多个单词---->遵循"大驼峰命名法" 接口的实现类和接口是一种:implements 实现关系 将接口的实现类--->称为"接口的子实现类"
2)接口实例化
接口不能直接实例化 , 格式: 接口名 对象名 =new 子实现类名() ; //接口多态 开发中:做项目的时候 接口----->接口子实现类(接口名的后面+impl) 命名格式: 用户模块 用户接口 UserDao:(dao---->Data Access Object :数据访问对象) 用户接口实现类 class UserDaoImpl implements UserDao{ }
3)接口的特点
成员变量: 只能常量,被静态修饰 存在默认修饰符:public satic final...(可以省略不写!) 成员方法: 接口中的方法只能是抽象方法,存在默认修饰符:public abstract(可以省略不写!) 构造方法: 接口没有构造方法!
4)关系问题
类与类之间(继承的时候用了) 继承关系,只支持单继承,不支持多继承,但是可以多层继承! 类与接口之间 实现关系,一个类在继承另一个类的同时,可以实现多个接口! 接口与接口之间 继承关系,可以单继承,也可以多继承

3.抽象类和接口的区别

1)成员的区别 抽象类: 成员变量:既可以定义常量,也可以变量 成员方法:既可以是抽象方法,也可以是非抽象方法 构造方法:存在,存在无参构造/有参构造,对数据进行初始化! 接口: 成员变量---->此时是一个常量:存在默认修饰符 public static final... 成员方法:只能是抽象方法 构造方法:不存在构造方法 2)关系的区别: 类与类之间: extends,单继承,不支持多继承,但是可以多层继承! 类与接口:实现关系:implements: 一个类继承另一个类的同时,可以实现多个接口! 接口与接口: 继承关系:extends 可以单继承,也可以多继承! 3)设计理念的区别 抽象类: 由继承来保证代码的复用性,由多态来保证代码的扩展性 ----体现一种"is a"的关系 接口: 是一种额外的功能,体现的是一种"like a"的关系 猫:部分猫可以跳高(实现跳高接口!)
最新回复(0)