第七节接口与抽象类

来源:互联网 发布:java new一个女朋友 编辑:程序博客网 时间:2024/06/15 22:46

一.回顾之前的内容
继承:面向对象的第二大特征
描述的是两个类之间的关系:一个类作为子类,另一个类作为父类
作用:避免重复代码 扩展类的功能
两个类的继承关系:
1.子类可以访问父类的非私有的属性和方法
2.子类可以新增自己的属性方法
3.子类可以重写父类已有的方法
重写:override 子类将父类已有方法重新实现
规则:
1.继承里
2.子类重写方法的声明必须要和父类完全一致
3.子类重写方法的访问权限不能比父类更加严格
4.子类重写的方法不能跑出比父类更大的异常
重载 overload
1.必须在同一个类中
2.方法名称必须一致
3.方法的参数列表不同(属性 数量 顺序)
访问权限:
就是一个修饰符用来表示 类 方法 属性的 可见度
public
protected
default
private
子类的创建过程:
任何子类对象的创建,都必须先调用父类的无参构造方法,去调用子类的构造方法

super关键字
可以不写 系统会自动调用super()调用父类无参的构造函数
1.指代父类的构造方法
2.访问父类的属性和方法

二.今天的内容
1.Object是所有类的超类父类,所以可以省略extends Object
toString()正常展示的是内存的地址,重写后是各个属性值
toString系统会默认帮助调用

Object上帝类
在java类中所有类都是以继承的结构存在,如果没有显示继承,默认继承Object类
所以说Object类是所有类的根类 里面的方法 可以被任意对象调用
toString()
默认展示的是对象的内存地址
重写后,可以展示对象的属性值
equals()默认比较的是对象的内存地址是否相等
重写后,可以比较对象的内容是否相等

String类 已经重写equals方法了,所以比较的是内容是否相等
注意:因为所有的类,都继承自Object,所以不用写
extends Object

2.抽象类:
一个类如果有抽象方法,则这个类必须声明为抽象类,如果一个类是抽象类,类中不一定有抽象方法

由来:
抽象类[是不断向上抽取的过程,在抽取的过程中,子类方法的声明是相同的,但是方法体不同,在抽取的过程中形成了没有方法体的方法,这个方法称之为抽象方法,抽象方法所在的类,叫做抽象类,抽象类和抽象的方法都需要通过abstract来修饰
描述实物时没有给定具体的信息对事物进行描述,那么这个类就是抽象类
抽象类只是描述了事物的行为,没有具体描述的功能,要通过子类特有的功能来描述
特点:
1.没有方法体的方法是抽象方法 抽象方法一定在抽象类中
2.抽象类和抽象的方法必须通过abstract来修饰
3.抽象类不能实例化,也就意味着不能创建对象
4.抽象类要求他的子类必须要重写他的抽象方法
问题
1.抽象类一定是父类
是的,因为抽象类没有足够的信息来描述事物,所以需要依托子类对其进行具体化
2.抽象类有构造方法吗?
有,一个类的构造方法可以为本类对象初始化,还可以给子类对象进行初始化
3.抽象类中可以不定义抽象方法吗
可以,这个类存在的意义是不让去创建对象,java底层代码中哟用到的比较多
4.abstract不能和那些关键字共存?
static 因为静态的可以通过类名直接调用,并且不能被重写,而抽象的是必须要被重写的
private 私有的,不能被本类之外调用的,不能被重写

final修饰的类不能被继承重写
抽象类与普通类区别

相同:都是用来描述事物的,可以定义属性方法 构造方法
不同:1.普通类不能定义抽象方法 抽象类可以
2.普通类可以被实例化,但是抽象类不可以
3.普通类中的方法可以不用重写,抽象类中抽象方法必须要重写

如果每一个子类都重写父类的方法,那么父类中的方法体就没有存在的意义了,抽象方法可以不用写方法体
如果父类是抽象类,那么子类必须重写父类抽象方法

抽象类的作用: 规范子类代码 节省代码
抽象类中可以有静态的方法,static修饰方法不允许被重写,所以
不能用static修饰

抽象类可以有私有方法,子类无法继承父类私有的方法
抽象类可以有构造方法,abstract不能修饰构造方法,因为abstract修饰的方法必须被子类重写,子类不能重写构造方法,
作用:将本类属性加载到子类的堆内存空间中
抽象类不能创建对象,因为抽象方法没有方法体 抽象类对象不能调用.

3.接口:比抽象类还要抽象,接口只包含了抽象的方法所以abstract可以省略不谢

当抽象类中的方法都是抽象的方法,那么可以把它定义为接口

接口的特点:
1.接口使用interface来定义
2.接口中的成员的修饰符是固定的,用public
3,接口不能实例化
4.接口必须由它的实现类全部重写

接口的定义格式:
interface 接口名{接口的内容}
类与类之间是继承关系,类与接口之间是实现的关系
一个类只有一个父类 ,但是可以实现多个接口
接口的`好处 接口可以多实现=- java 改良后的多继承]

接口和抽象类:

1, 抽象类是用于继承的, 而且是单继承接口是用来实现的, 而且可以多实现
2, 抽象类中可以定义非抽象的内容, 可以直接提供给子类去使用接口中全部都是抽象的方法, 必须由实现类来全部实现
3, 抽象类的存在是继承的关系, 是 is - a关系接口存在着实现的关系, 是 like a 的关系
相同点: 都是不断的向上抽取的