-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------
多态指同一个实体同时具有多种形式。在生活中多态指的是一个对象在不同环境在的不同状态和行为,例如同样是学生这个对象,但老师眼里的学生和家长眼里的学生是不同的,所以在java中需要多态来实现对象在不同环境下的不同形式。
多态:
多态具体指的是对象在不同状态下表现的形式
多态一般构造于继承和接口的环境下
多态体现在向上转型和向下转型(强制转型)
多态体现在代码上主要是:
①父类 对象名=new 子类()
②在方法上体现,声明方法的时候,形参为父类对象,方法调用时专递得实参是子类的对象
③接口 对象=new 实现类
如果子类以父类的身份出现,子类自身特有的行为将会失效
如果子类以父类的身份出现,子类如果重写父类的方法,调用的是具体子类的方法(动态绑定)。
多态减少了方法重载之后的冗余,实现代码的可扩展性。
例题:编写一个Java应用程序,设计一个汽车类Vehicle,包含的成员属性有:车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含属性载人数passenger_load。卡车Truck是Vehicle的子类,其中包含载人数passenger_load和载重量payload。要求每个类都有相关数据的输出方法。编写测试类使用多态输出汽车的信息
/***
*父类
*/
public class Vehicle {
/*声明方法*/
private String name;
double wheels;
double weight;
/*getter,setter方法*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getWheels() {
return wheels;
}
public void setWheels(double wheels) {
this.wheels = wheels;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
/*构造方法*/
public Vehicle(String name, double wheels, double weight) {
super();
this.name = name;
this.wheels = wheels;
this.weight = weight;
}
/*实例方法*/
public void go(){
System.out.println(name+"有"+wheels+"轮子,"+"他的重量是:"+weight+"吨");
}
}
/**
**小汽车类,子类
*/
public class Car extends Vehicle {
public Car(String name, double wheels, double weight) {
super(name, wheels, weight);
}
@Override
public void go() {
super.go();
int passenger_load=5;
System.out.println("他能载"+passenger_load+"个人");
}
}
/**
*卡车类
*/
public class Truck extends Vehicle {
public Truck(String name, double wheels, double weight) {
super(name, wheels, weight);
}
@Override
public void go() {
super.go();
double passenger_load=6;
double payload=10;
System.out.println("他的载人量是:"+passenger_load+"\n"+"他的载重量是"+payload+"吨");
}
}
/*
*测试类
*/
public class test {
public void carry(Vehicle a)
{
a.go();
}
public static void main(String[] args) {
test get=new test();
get.carry(new Car("小汽车",4,5));
System.out.println("--------------------------");
get.carry(new Truck("大卡车",12,6));
}
}