/**
* 定义一个名为Vehicles(交通工具)的基类,该类中应包含String类型的成员属性brand(商标)和color(颜色),
* 还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,在控制台显示商标和颜色),
* 并编写构造方法初始化其成员属性。
*
*
*在main方法中测试以上各类。
* @author 代昌波
*
*/
public class Vehicles {
private String brand ;//定义两个属性
private String color;
/*
* 无惨构造方法
*/
public Vehicles(){
}
/**
* 含参构造方法
* @param brand
* @param color
*/
public Vehicles(String brand, String color){
this.brand=brand;
this.color=color;
}
public void run(){
System.out.println("我已经开动了:");
}
public void showInfo(){
System.out.println("颜色:"+color+"商标:"+brand);
}
}
-------------------------------------------------------------------------------------------
package com.wu.Car;
import com.wu.Vechiles.Vehicles;
/**
* 编写Car(小汽车)类继承于Vehicles类,增加int型成员属性seats(座位),
*还应增加成员方法showCar(在控制台显示小汽车的信息),并编写构造方法。
* @author 代昌波
* @version 1.0
*
*/
public class Car extends Vehicles {
private int seats;
public Car(){
}
public Car( String brand,String color,int seats){
super(brand,color);//放在构造函数的第一句
this.seats=seats;
}
public void showCar(){
super.showInfo();
System.out.println("座位:"+seats);
}
}
-------------------------------------------------------------------------------------
package com.wu.Truck;
import com.wu.Vechiles.Vehicles;
/**
* 编写Truck(卡车)类继承于Vehicles类,增加float型成员属性load(载重),
* 还应增加成员方法showTruck(在控制台显示卡车的信息),并编写构造方法。
* @author 代昌波
*
*/
public class Truck extends Vehicles {
private float load;
public Truck(){
}
public Truck(String brand,String color, float load){
super(brand,color);
this.load=load;
}
public void showTruck(){
super.showInfo();
System.out.println("载重:"+load);
}
}
---------------------------------------------------------------------------------------
package com.wu.Text;
import com.wu.Car.Car;
import com.wu.Truck.Truck;
import com.wu.Vechiles.Vehicles;
/**
* 在main方法中测试以上各类。
* @author 代昌波
*
*/
public class Test {
public static void main(String[] args) {
Vehicles vl=new Vehicles("白色","陆虎");
Car car= new Car("兰博基尼","红色",5);
Truck truck=new Truck("奔驰","蓝色",6000);
vl.run();
vl.showInfo();
car.showInfo();
car.run();
car.showCar();
truck.showTruck();
truck.run();
}
}
面向对象是java中比较重要的内容,面向对象程序设计即就是oop思想,面向对象包括三大特征即:封装,继承,多态,上述例子讲的就是继承的特性,继承提高了代码的复用性,让类与类之间产生了关系,正是有了这个关系才有了多态的特征,java语言中,java只支持单继承不支持多继承,然而这斌不是绝对的,因为在接口中可以在继承一个类的同时进行多实现,之所以不支持多继承是因为多继承容易带来安全隐患,当多个父类中定义了相同的功能,且功能不同时不确定要运行哪一个,故而无法实现多继承。但是java中支持多层继承,即C继承B,B继承A,他们只能抽取共性,在创建对象时,查阅父类功能,创建子类对象使用功能。在继承中this代表本类对象的引用,super代表父类对象的引用,如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量时用this,子类要访问父类中的变量用super,简单来说super和this的使用几乎一致,需要注意一点super语句一定要定义在子类构造函数第一行。父类引用指向子类对象,当子类出现和父类一模一样的函数 且当子类对象调用该函数时,会运行子类函数的内容,如同父类的函数被覆盖一样,这就是函数的一个重要特性即重写,也称覆盖,子类覆盖父类必须保证子类权限大于等于父类权限,否则编译失败,特别注意:静态只能覆盖讲台,在这里应该区分重载和重写是不同的,重载是指一个类中可以有多个相同名字的方法,但是这些方法参数必不相同,即参数个数不同,参数类型不同,,,,,然而重写是指子父类方法要一模一样。子父类的构造函数,在子类对象进行初始化时,父类构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的super()语句,在继承中子类一定要访问父类中的构造函数,因为父类中的数据子类可以直接获取,所以子类子啊建立对象时,需要先查看父类时如何对谢谢数据进行初始化的。