JAVA面向对象三大特性:继承、封装、多态。
继承(泛化):继承性是子类自动共享父类属性和方法的机制
【修饰符】 class 子类名 extends 父类名
特点:1.每一个类只有一个父类 2.一个父类可以有多个子类 3.子类拥有父类的属性和方法
原理:执行子类的构造函数时自动执行父类的构造函数。
super()
调用父类的构造器。(继承是默认?)
只能出现在子类的构造器中,且必须是第一行
super()中的参数,决定了调用父类哪个构造器
如果子类构造器其中没有super关键字,编译器会自动添加super(),调用父类的空构造函数
在同一个构造器中this()和super()不能同时存在
this()
调用本类的构造器。
只能写在第一行
继承
关键字:extends
继承的好处:1.使编码更高效 2.易维护 3.代码的重用
抽象类:包含了抽象方法的类
抽象方法
[访问权限修饰符] abstract 返回值类型 抽象方法名 (参数列表) ;
子类继承于抽象类,就要实现父类中的抽象方法,否则只能把自己定义为抽象类
抽象类不能创建对象
抽象方法不能为static;
必须声明为抽象类的情况
一个类中包含一个或多个抽象方法的时候
接口:
语法规则:[访问权限修饰符] interface 接口名 {接口的成员}
//在接口中没有具体实现的方法,都是抽象方法,要在实现类中实现
1.jdk8开始可以在接口中使用default关键字修饰方法,使方法可以拥有具体实现
2.用static关键字修饰方法,可以使用接口名直接调用方法
3.只有声明,没有具体实现(最常用)
封装
权限修饰符
private权限小,限制类外访问,一般把属性设为private,让其他类 不能直接访问属性,达到保护属性的目的。
protected:受保护的,除了可被类自身及与其在同一个包中的代码 访问外,还可以在一个类中通过对象引用来访问,前提是这些对象引用至少应该具有与该成员所在的类相同的类型,也即是这些引用具有该成员所在类的类型或是其一子类型。
多态
概念:通过不同的子类对象,覆盖相同的父类方法,实现不同的效果。
三个必要条件:1.要有继承或实现2.要有重写(覆盖)3.父类引用指向子类对象
向上转型:
父类类名 对象名=new 子类类名
具有继承或实现关系
向上转换损失了子类新扩展的属性和方法,仅可以使用从父类中继承的属性和方法
向下转型:
子类类名 对象名=(子类类名)父类对象
内部类
内部类:定义在一个类的内部的类
语法规则:
[访问权限修饰符] class 类名{
[访问权限修饰符] static class 类名{
内部类成员
}
外部类成员
}
注意:
- 无需创建外部类对象,可以访问外部类中的属性和方法
- 必须创建内部类对象,才可以使用内部类中的属性和方法
- 如果内部类中的方法名与外部类方法名相同,内部类优先级>外部类优先级
- 不能使用static修饰变量
- 静态内部类