继承和多态
继承
概念:当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足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、提高了系统的可扩展性和可维护性。
继承
概念:当两个或两个以上的类,具有部分相同的内容(属性和方法)并且可抽象出另一个类彼此之间满足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、提高了系统的可扩展性和可维护性。