一.包
在了解继承之前,我们先来了解一下包的使用,包是类的逻辑组织形式,在程序中可以声明类所在的包,同一个包中的类名不能重复,通过包可以对类的访问权进行限制,此外,包是有层次结构的,即一个包可中可以包含若干个子包。
自定义包
除Java提供的用于程序开发的系统内被存放于各种系统包之外,开发人员也可以自创自定义包,如果在程序中没有声明包,类将被存放到default的包中,default的包没有名称,不建议采用default包的形式,建议开发人员按照业务的需求创建用户自定义包在程序中,声明包的语法如下:
package < 包名 >
注意:声明一个包的语句必须写在类的第一行
包的导入
如果要使用Java中存在的包,可以在程序中使用import语句导入包,在程序中导入包的格式如下:
import < 包名 >.< 类名 >
如果要导入一个包中的多个类,可以使用"*"表示包中所有的类,例如:
import java.util.*; //导入java.util包中所有的类
import java.util.ArrayList; //导入java.util包中的ArrayList类
包的访问权限
一个包中具有缺省访问权限的成员只能在同一个包中被引用,如果一个包中的成员的访问权限为public,那么这些成员才能被其他包的类所引用。
1.Public访问权限成员(类,属性和方法统称),Public成员可以被其他包中的类访问,Public类中的protected成员可以被由他派生的在其他包中的子句访问。
2.缺省访问权限成员,缺省访问权限成员只能被同一个包中的类访问,不能被其他的包中的类访问。
例如,如果去掉如下Tree类的clear()方法的访问修饰符public,此时Hero类中就会显示错误提示
继承
继承Java面向对象的三大特性之一,是实现程序代码复用的重要手段,继承是从已有的类中派生出新的类,新的类包含已有的类的数据属性和行为并能扩展新的能力,合理的使用继承可以提高代码的重要性.
继承的概述
Java的继承使用extends关键词实现,实现继承的类称为子类,被继承的类称为父类,也被称为基类,超类,父类和子类的关系是一般和特殊的关系,如水果和苹果的关系,苹果继承水果,苹果是水果的子类,和苹果是一种特殊的水果。
Java的继承语法格式如下:
[ 修饰符 ] class 子类名 [extends 父类名] {
// 类定义部分
}
注意:子类可以继承父类中访问权限为public,protected,default的成员变量和方法
继承的实现
实践:创建一个交通工具父类(Vehicles)以及;两个子类,分别是小汽车类(Car)和卡车类(Truck),显示出各类的相关信息。
(1)创建名为交通工具的父类(Vehicles) ,该类中有两个String类型的属性,商标(brand)和颜色(color),该类中还包含一个行驶(run)的方法,该方法中输出汽车的品牌+ “正在行驶” ,并通过调用该类的showinfo()方法,在控制台显示汽车商标和颜色。通过该类的有参构造方法初始化其成员属性。
(2)创建小汽车类(Car)继承Vehicles类,在该类中增加int型成员属性座位(seats)和showCar()方法,该方法用于在控制台显示小汽车的信息。
(3)编写卡车类(Truck)继承Vehicles类,添加float型成员属性载重(load)和showTruck0)方法,该方法用于在控制台显示卡车的信息。
(4)创建测试类VehiclesTest,在该类的主方法中完成需求中相关信息的输出。
(5)创建com.java.oriented,将上述类保存至该包中。
代码如下:
package com.java.oriented;
public class Vehicles {
String brand;
String color;
public Vehicles(String brand,String color){
this.brand=brand;
this.color=color;
}
public void run() {
System.out.println("我"+this.brand+"正在行驶");
}
public void showinfo() {
System.out.println("品牌:"+brand+"\t"+"颜色:"+this.color);
}
}
package com.java.oriented;
public class Car extends Vehicles{
public Car(String brand, String color) {
super(brand, color);
}
public void showCar(int seats) {
super.showinfo();
System.out.println("我是一辆:"+this.brand+"\t我的颜色:"+this.color+"\t我有:"+seats+"个座位");
}
}
package com.java.oriented;
public class Truck extends Vehicles {
public Truck(String brand, String color) {
super(brand, color);
}
public void showTruck(float load) {
super.showinfo();
System.out.println("我是一辆:"+this.brand+"\t我的颜色:"+this.color+"\t我的载重:"+load+"吨的材料");
}
}
package com.java.oriented;
public class Vehiclestest {
public static void main(String[] args) {
Car c= new Car("阿斯顿马丁", "绿色");
c.showCar(6);
Truck t= new Truck("东风小康","蓝色");
t.showTruck((float) 12.0);
}
}
运行结果如下:
注意:子类无法继承父类私有成员,而且在实际开发中,不建议让子类继承父类的属性,因为子类继承父类的属性会打破父类的封装性,且Java继承为单继承,即一个子类只能有一个直接的父类。