继承 概念:当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足is-a关系,这种关系就是继承 继承语法(关键字为extends) public class 父类名 { } public class 子类名 extends 父类名 { } 继承规范: 1、当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足is-a关系必须要用继承 2、当相似代码出现多次,用方法代替 重点: 在继承关系中,父类更通用、子类更具体更有一版特性和行为,而子类除了具有父类的特性和行为,还具有一些自己的特殊的特征和行为。 在子类继承父类中构造方法和私有方法不能被继承。 在java中只能单一继承 继承的优点: 1、代码的可重用性 2、父类的属性和方法可用于子类 3、设计应用程序变得更加简单 4、可以轻松地自定义子类super调用构造方法 调用构造方法规范: 1、构造方法默认第一句super()。 2、若父类只有一个有参构造方法则子类必须定义构造。 3、一旦类中定义构造方法,那么JVM虚拟机不定义默认构造方法。 4、super() 调用父类构造方法时必须是子类构造方法中的第一句。 super关键字的用法super() | 调用父类构造方法 | super.父类中实例方法名/属性 | 调用父类的实例方法,调用非私有属性。 | 举例: //子类用 super 关键字调用父类无参构造 public class 父类名 { public 父类名() { } } public class 子类名 extends 父类名 { public 子类名() { super(); //super() 调用父类构造方法时必须是子类构造方法中的第一句。 } } //子类用 super 关键字调用父类有参构造 public class 父类名 { public 父类名(数据类型 参数1,数据类型 参数2) { } } public class 子类名 extends 父类名 { public 子类名(数据类型 参数1,数据类型 参数2) //若父类只有一个有参构造方法则子类必须定义构造。 { super(参数1,参数2); //super() 调用父类构造方法时必须是子类构造方法中的第一句。 } } this关键字的用法this() | 调用该类本身其他的构造方法 | this.属性 | 调用方法非私有属性等 | 方法重写 概念:在子类中定义的一个方法,其名称、返回类型及参数类表正好与父类中某个方法名称、返回类型及参数类表相匹配, 那么可以说,子类的方法重写了父类的方法。 重写规范: 1、存在类的层次结构(存在子类和父类中)。 2、返回类型、方法名和参数列表相同。 3、方法体不同。 4、子类重写时,方法访问修饰权限不低于父类的权限。 5、子类重写的方法不能抛出父类不包含的异常。 多态 概念:同一个实现接口,使用不同的实例而执行不同的操作。 实现步骤: 1、子类重写父类的方法 2、把父类类型作为参数类型,该父类及其子类对象作为参数传入。 3、运行时,根据实际创建对象类型动态决定使用哪个方法。 4、父类引用指向子类对象时注意:该引用只能调用父类自己的方法或者是子类已重写的方法。并且首先实例化父类的构造方法 举例: //车类(父类) public class Vehicle{ //运输方法 public void transportation(){ System.out.println("车能运输!") } } //公交车类(子类) public class Bus{ //子类重写父类运输方法 public void transportation(){ System.out.println("公交车运输人!") } } //货车类(子类) public class Truck{ //子类重写父类运输方法 public void transpotation(){ System.out.println("货车运输货物!") } } /测试类 public class VehicleTest{ //把父类类型作为参数类型,该父类及其子类对象作为参数传入。 public void transport(Vehicle vehicle){ vehicle.transpotation(); } //main方法 public static void main(String[] args){ //父类引用子类对象 Vehicle bus = new Bus(); //父类引用子类对象 Vehicle truck = new Truck(); //创建测试对象 VehicleTest vehicleTest = new VehicleTest(); //把子类对象作为参数传入 vehicleTest.transport(bus); //把子类对象作为参数传入 vehicleTest.transport(truck); } } 多态的优点: 1、不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。 2、多态能改善代码结构,提高其可读性。 3、多态是从类的角度来处理逻辑上的分离。 4、能把多个类(派生同一个基类)当做一个类来处理。这样就能作用于不同的类型了。继承、重写和多态的优点: 1、使用继承有效的实现代码的复用。 2、提高了系统的可扩展性和可维护性。
|