面向对象——继承

来源:互联网 发布:马苏 知乎 编辑:程序博客网 时间:2024/05/02 07:28

       继承:面向对象最显著的一个特性,从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。最常使用的两个关键字是extends和implements。

 任务:编写交通工具类,具有前进run()功能,子类有自行车、小轿车、地铁,重写父类方法,主人有属性name,age属性,方法回家goHome(交通工具),需要使用交通工具,使用抽象类优化程序。
创建一个交通工具抽象类:
package test_abstract;
public abstract class Vehicle {
   //成员变量(属性)
int speed;//速度
int wheel; //车轮
  //有参数的构造方法
public Vehicle(int speed, int wheel) {
super();
this.speed = speed;
this.wheel = wheel;
}
   //成员方法(功能)
public abstract void run();//前进run()功能
}
创建一个自行车类(使用继承):
package test_abstract;
public class Bike extends Vehicle{
public Bike(int speed, int wheel) {
super(speed, wheel);
}
@Override
public void run() {//重写方法
// TODO Auto-generated method stub
System.out.println("骑自行车回家,速度为"+this.speed+"m/s。");
}
}
创建一个小轿车类(使用继承):
package test_abstract;
public class Car extends Vehicle {
public Car(int speed, int wheel) {
super(speed, wheel);
}
@Override
public void run() {//重写方法
// TODO Auto-generated method stub
System.out.println("开小轿车回家,速度为"+this.speed+"m/s。");
}
}
创建一个地铁类(使用继承):
package test_abstract;
public class Subway extends Vehicle {
public Subway(int speed, int wheel) {
super(speed, wheel);
}
@Override
public void run() {//重写方法
// TODO Auto-generated method stub
System.out.println("乘地铁回家,速度为"+this.speed+"m/s。");
}
}
创建一个人类:
package test_abstract;
public class Person {
    //成员变量(属性)
String name;
int age;
    //有参数的构造方法
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
    //有参数成员方法
public void goHome(Vehicle vehicle){
System.out.print(this.name+","+this.age+"岁,");
if (vehicle instanceof Bike) {//判断交通工具属于哪一类
Bike bike = (Bike) vehicle;//向上转型
bike.run();//调用方法
}else if (vehicle instanceof Car) {
Car car = (Car) vehicle;
car.run();
}else {
Subway subway = (Subway) vehicle;
subway.run();
}
}
}
创建一个测试类:
package test_abstract;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Vehicle vehicle = null;
Person host = new Person("小明", 25);
System.out.println("请输入数字选择交通工具:");
     //调用scanner输入方法
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){//循环出入
   int i = scanner.nextInt();
   if (i%3 == 0) {
vehicle = new Bike(20, 2);
}else if (i%3 == 1) {
vehicle = new Car(60, 4);
}else {
vehicle = new Subway(80, 50);
}
host.goHome(vehicle);//调用方法
   }
    }
}

0 0