3、面向对象
3.7 数组工具类
示例: - public class ArrayTool{
- //该类中的方法都是静态的,所以该类是不需要创造对象的
- //为了保证不让他人创建该类对象,可以将构造函数私有化
- private ArrayTool(){}
- //获取整型数组的最大值
- public static int getMax(int[] arr){
- int maxIndex = 0;
- for(int x = 1; x < arr.length; x++){
- if(arr[x] > arr[maxIndex])
- maxIndex = x;
- }
- return arr[maxIndex];
- }
- //对数组进行选择排序
- public static void selectSort(int[] arr){
- for(int x = 0; x <arr.length -1; x++){
- for(int y = x + 1; y < arr.length; y++){
- if(arr[x] > arr[y])
- swap(arr,x,y);
- }
- }
- }
- //用于给数组进行元素的位置置换。
- private static void swap(int[] arr, int a,int b){
- int temp = arr[a];
- arr[a] = arr[b];
- arr[b] = temp;
- }
- //获取指定的元素在指定数组中的索引
- public static int getIndex(int[] arr, int key){
- for(int x = 0; x < arr.length; x++){
- if(arr[x] == key)
- return x;
- }
- return -1;
- }
- //将int 数组转换成字符串,格式是:[e1,e2,...]
- public static String arrayToString(int[] arr){
- String str = "[";
- for(int x = 0; x < arr.length; x++){
- if(x != arr.length - 1)
- str = str + arr[x] + ",";
- else
- str = str + arr[x] + "]";
- }
- return str;
- }
- }
- class ArrayToolDemo{
- //保证程序的独立运行
- public static void main(String[] args){
- int[] arr = {4,8,2,9,7,72,6};
- int max = ArrayTool.getMax(arr);
- System.out.println("max = " + max);
- int index = ArrayTool.getIndex(arr,10);
- System.out.println("index = " + index);
- }
- }
复制代码 运行结果:
什么时候使用覆盖操作?
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
示例: - class Phone{
- void call(){}
- void show(){
- System.out.println("number" );
- }
- }
- class NewPhone extends Phone{
- void show(){
- System.out.println("name" );
- System.out.println("pic" );
- super.show();
- }
- }
- class ExtendDemo{
- public static void main(String[] args){
- NewPhone p = new NewPhone();
- p.show();
- }
- }
复制代码 运行结果:
P.S.
1、父类中的私有方法不可以被覆盖。
2、父类为static的方法无法覆盖。
3、覆盖时,子类方法权限一定要大于等于父类方法权限。
示例: - class Fu{
- public void show(){
- System.out.println("fu show run" );
- }
- }
- class Zi extends Fu{
- private void show(){
- System.out.println("zi show run" );
- }
- }
- class ExtendDemo{
- public static void main(String[] args){
- Zi z = new Zi();
- z.show();
- }
- }
复制代码 运行结果:
3. 构造函数
子父类中构造函数的特点:
在子类构造函数执行时,发现父类构造函数也运行了。
原因:在子类的构造函数中,第一行有一个默认的隐式语句:super();。
注意:如果使用super(4);语句调用父类的其他构造函数,那么默认的父类构造函数将不会再被调用。
示例: - class Fu{
- int num ;
- Fu(){
- num = 10;
- System.out.println("A fu run" );
- }
- Fu(int x){
- System.out.println("B fu run..." + x);
- }
- }
- class Zi extends Fu{
- Zi(){
- //super();//默认调用的就是父类中的空参数的构造函数
- System.out.println("C zi run " + num);
- }
- Zi(int x){
- super(4);
- System.out.println("D zi run " + x);
- }
- }
- class ExtendDemo{
- public static void main(String[] args){
- new Zi();
- System.out.println("-------------------" );
- new Zi(6);
- }
- }
复制代码 运行结果:
|