一、继承(Inheritance)
1、概念:生活中儿子继承父亲的资产,而程序中是类与类之间特征和行为的一种赠与或获得。
2、格式:class 子类 extends 父类();
3、作用:提高代码的复用性,还提高了代码的可扩展性。
4、特性:单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类。产生继承后,子类可以父类的属性和行为,也可以定义子类特有的属性与方法。
注:(1)类中的构造方法,只负责创建本类对象,不可继承。private修饰的属性和方法,只有本类可见。父类与子类不在同一个package中时,default修饰的属性和方法,仅同包可见。如果定义一个类是没有调用extends,那么它的父类是java.lang.Object
5、方法的重写(Override)
概念:当我们所写的子类当中需要有一个方法,而这个方法的名字恰好与父类当中的方法重名,而且此时父类当中的这个方法并不能满足子类的需要,此时我们就需要对这个方法进行重写。
原则:方法名称,参数列表,返回值类型必须与父类相同。子类访问修饰符>=父类访问修饰符
执行:子类覆盖父类方法后,调用时优先执行子类覆盖后的方法。
重写与重载的区别: (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不 同或数量相同而类型和次序不同,则称为方法的重载(Overloading) (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个 数与类型一样,返回值也一样的方法,就称为重写(Overriding) (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多 态性表现。
6、关键字
(1)super
概念:当在子类对象中,子类想访问父类的东西,可以使用“super.”的方式访问。父子类的同名属性不存在覆盖关系,两块空间同时存在(子类覆盖父类属性),需使用不同的前缀进行访问。
用法;(1)子类方法中 super.父类属性,super.父类方法();(2)子类构造方法中 super(), super(参数)
this与super的区别:
(1)代表的事物不同
super代表的是⽗类空间的引⽤
this 代表的是所属函数的调⽤者对象
(2)使⽤前提不同
super 必须要有继承关系才能使⽤
this 不需要继承关系也能使⽤
(3)调⽤的构造函数不同
super :调⽤⽗类的构造函数
this :调⽤所属类的构造函数
注:当子类构造中使用了this()或this(实参),不可再同时书写super()或super(实参),会由this()指向的构造方法完成super()的调用。
(2)final
①final修饰变量不能被重新赋值。
class Math{
public final double PI=3.1415926;
}
② final 修饰方法不可被子类重写,但可以被重载。
final void student (){
}
③ final修饰类,修饰的类不能被继承
final class FontDialog{
}
④ 可以修饰 类,方法,属性,变量。
二、多态
概念:父类引用指向子类对象,从而产生多种形态。二者具有直接或间接的继承关系时,父类引用可指向对象,即形成多态。多态与方法有关,与属性无关。
格式:父类类型 变量名=new 子类类型();
条件:继承,方法重写,父类引用指向子类对象
父类引用指向子类对象后用该父类引用调用子类重写的方法。
作用:屏蔽子类间的差距,灵活,耦合度低。
应用:1)使用父类作为方法形参实现多态,使方法参数的类型更为宽泛 调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象
2) 使用父类作为方法返回值实现多态,使方法可以返回子类对象 调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象。
对象的类型转换:
1)向上转型:父类的引用指向子类的对象。
Father f=new Son():
Son son=new Son();
Father f=(Father)son;
以上两种方法创建上转型对象,其中San是Father的子类,f就是上转型对象。
注:仅可调用父类所声明的属性和方法。
向下转型:子类对象指向父类引用。
注:只有转换回子类真实类型,才可调用子类独有的属性和方法。
三、抽象类
抽象类的成员变量,成员方法,构造方法与普通类一致。抽象类有 abstract 修饰。抽象类不可以实例化对象。抽象类可以有抽象方法。抽象方法不能有方法体,只能在非抽象子类中实现。
抽象方法:abstract 修饰的方法是抽象方法。抽象方法没有实现,需要在子类中实现。
public abstract void test();
抽象类可以没有抽象方法,但是有抽象方法的一定是抽象类。一个类只能继承一个抽象类
四、接口
接口是一种抽象类型,是抽象方法的集合,以 interface 声明。一个类可以实现多个接口。
接口不是类。类描述对象的属性和行为,接口包含类需要实现的方法。接口方法默认是 public abstract,变量默认是 public static final。
特点:接口不能实例化对象。接口没有构造函数。接口中都是抽象方法。接口不能包含成员变量,除了被 static final 修饰的变量。接口被类 实现(implement),一个类可以实现多个接口。
语法:
class 子类 extends 父类 implements 接口1,接口2,...()
接口与抽象类的区别:
(1)一个类 只能继承一个抽象类,但是可以实现多个接口。
(2)抽象类中成员变量可以是各种类型的;接口中变量只能是 public static final 。
(3)抽象类中的非抽象方法 可以是 private default protected public;接口中只能是 default 的方法。非抽象方法有方法体。
(4)java 8 之前,接口不能有 static 静态方法;java 8 之后,接口中可以有 static 静态方法。抽象类可以有 static 静态方法。