向上转型
package Package;
public abstract class Father {
public Father(){
System.out.println("父类构造方法");
}
void doAnything(){
System.out.println("父类方法");
}
public static void main(String[] args){
//向上转型
Father f=new son();
f.doAnything();
f=new son2();
f.doAnything();
}
}
package Package;
public class son extends Father {
public son(){
System.out.println("子类构造方法");
}
void doAnything(){
System.out.println("子类重写方法");
}
void doSomething(){
System.out.println("子类方法");
}
}
package Package;
public class son2 extends Father{
public son2(){
System.out.println("子类2构造方法");
}
void doAnything() {
System.out.println("子类2重写方法");
}
void doSomething1(){
System.out.println("子类2方法");
}
}
向下转型
package Package;
public abstract class Vehicle {
public abstract void Trans();
}
package Package;
public class Car extends Vehicle {
@Override
public void Trans() {
System.out.println("小轿车载人前行");
}
public void run(){
System.out.println("小车在路上开");
}
}
package Package;
public class Boat extends Vehicle {
@Override
public void Trans() {
System.out.println("小船载人前行");
}
public void swin(){
System.out.println("小船在水上开");
}
}
package Package;
public class Plane extends Vehicle{
@Override
public void Trans() {
System.out.println("飞机载人前行");
}
public void fly(){
System.out.println("飞机在天上开");
}
}
package Package;
public class Driver {
String name;
public Driver(String name){
this.name=name;
}
//重点
public void action(Vehicle vehicle){
if (vehicle instanceof Car){
Car car=(Car)vehicle;
car.run();
car.Trans();
}else if (vehicle instanceof Boat){
Boat boat=(Boat)vehicle;
boat.swin();
boat.Trans();
}else if (vehicle instanceof Plane){
Plane plane=(Plane)vehicle;
plane.fly();
plane.Trans();
}
}
}
package Package;
public class Test {
public static void main(String[] args){
//需要先向上转型
Vehicle vehicle;
Driver driver=new Driver("张三");
vehicle=new Car();
driver.action(vehicle);
vehicle=new Boat();
driver.action(vehicle);
vehicle=new Plane();
driver.action(vehicle);
}
}