Java继承特性和super关键字和快速排序

1 篇文章 0 订阅
1 篇文章 0 订阅

继承:关键字为extends,子类对象继承父类对象的所有内容,但不都可见;静态资源属于类,不属于被继承范畴。

继承中的构造方法:

子类构造方法默认来自父类无参;

如果父类有有参但没有无参,则子类无法直接写出无参构造;

 需要用super()指定父类的构造方法;

super的作用:可以修饰属性,方法,构造方法;

super调用属性、方法:

子类的方法中,可以通过super.属性  super.方法 的方式,

显示的去调用父类提供的属性,方法。

在通常情况下,super.可以省略不写;

但是当子类和父类的属性或方法重名时,你要想使用父类的属性或方法,必须加上修饰符super., 只能通过super.属性或super.方法来调用 !

super调用构造方法:

其实我们平时写的空构造器的第一 行都有: super() -->作用:调用父类的空构造器,只是我们一般都省略不写;

如果构造器中已经显示的调用super父类构造器,那么它的第一行就没有默认分配的super0);

在构造器中,super调用父类构造器和this调用子类构造器只能存在一个, 两者不能共存

因为super修饰构造器要放在第一行, this修饰构造器也要放在第一行:

以后写代码构造器的生成可以直接使用IDEA提供的快捷键:alt +insert

下面大家看一下快速排序;

package cn.kgc;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author:Adminstrator
 * @Date:2021-11-02
 * @Description:演示快速排序
 * 方法的递归
 */
public class QuickSort {
    /**
     * 快速排序,使用递归
     * @param a 待排序数组
     * @param s 数组起始位置
     * @param e 数组结束位置
     */
    public static void sort(int[] a,int s,int e){
        if (s >= e) {//递归的退出条件,当数组中只有一个元素或没有元素
            return;
        }
        int i=s;//因为在循环中, 下标会不停的动,因此需要一个临时变量来变化,
        int j=e;//而不是直接动数组的开始和结束
        int num=a[s];//每次以数组的第一个元素来作为基准值
        while(i<j){// 只要没有找到基准值的位置,就需要继续判断
            while(num>=a[j]&&j>i)j--;//只要满足顺序的,就继续
            a[i]=a[j];//不满足顺序的,就向左放到对应位置
            while(num<=a[i]&&i<j)i++ ;//只要满足顺序的,就继续
            a[j]=a[i];//不满足顺序的,就向右放到对应位置
        }
        a[i]=num;//i和j相等,就是基准值的位置
        sort(a,s,i-1);//基准值左边的元素作为新数组,继续上面的过程
        sort(a,i+1,e);//基准值右边的元素作为新数组,继续上面的过程
    }

    public static int[] randomArray(int length){
        int[] a=new int[length];
        for (int i = 0; i < a.length; i++) {
            a[i]=(int)(Math.random()*length*10);
        }
        return a;
    }
    public static void bubbleSort(int[] a){  //冒泡排序法
        for (int i = 0; i < a.length-1; i++) {
            boolean flag=true;
            for (int j = 0; j < a.length-1-i; j++) {
                if(a[j]>a[j+1]){
                    int tmp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=tmp;
                    flag=false;
                }
            }
            if(flag){
                break;
            }
        }
    }
    public static void main(String[] args) {
        int[] a=randomArray(10000);
//        System.out.println(Arrays.toString(a));
//        sort(a,0,a.length-1);
//        System.out.println(Arrays.toString(a));
        long s=System.currentTimeMillis();
//        bubbleSort(a);      //冒泡排序
        sort(a,0,a.length-1);//快速排序
//        Arrays.sort(a);//数组自带的排序方法,其实里面包含了快排
        long e=System.currentTimeMillis();
        System.out.println(e-s);  //显示排序所用时间ms
     //很明显快排速度远远超过冒泡排序,递归是在栈里进行的,循环是在堆里进行的,栈的速度远快于堆
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该课程由付强老师主讲,系统的、全面的、具体的讲解了java入门的知识。可以使初级的学员入门。Java入门Java的历史、Java的版本、Java的优势、软件行业前景Java开发环境搭建、编写Java入门练习虚拟机的运行机制、Java的平台无关性、虚拟机垃圾回收机制基础语法关键字、标识符、Java数据类型分类、基础数据类型、取值范围变量、常量、三种注释、生成doc文档、运算符、表达式if语句、switch语句、嵌套判断for语句、while语句、do-while语句、嵌套循环类和对象面向过程和面向对象的区别类的构成、访问修饰符、对象的内存分配this关键字、按值传递与按引用传递、对象的初始化顺序高级类特性类的继承、父子类的初始化顺序、单继承性方法的覆盖、重载、super关键字、多态、instanceof关键字、强制类型转换、static关键字、final关键字数组和枚举一维数组的应用及内存分配多维数组的应用及内存分配数组的复制、数组的按引用传递排序算法:冒泡、直接选择、插入选择、希尔、快速、归并、堆排序Arrays工具类的应用枚举类型的应用常见类的使用Object类的底层及应用、Objects类String类的底层及应用、正则表达式StringBuffer和StringBuilder的底层及应用Math类的应用、包装类的应用日期类的应用:Date、DateFormat、Calendar、LocalDateTime、Instant、LocalDate、MonthDay、ZonedDateTime、YearMonth、新旧日期转换BigInteger和BingDecimal、DecimalFormatSystem类、Scanner类抽象类和接口抽象类的规则及应用接口的规则及应用默认方法、静态方法、函数式接口、Lambda表达式异常异常的定义异常的处理:抓(try-catch-finally)、抛(throws)异常的分类、自定义异常的应用、throw关键字集合框架集合框架结构:接口、实现类Collection接口的方法、Set接口的方法、List接口的方法、Map接口的方法Array、Linked、Hash、Tree底层实现原理泛型的作用、Collections工具类、历史集合类I/O流Path类的原理及应用、Files类的原理及应用文件字节流FileInputStream的原理及应用对象类、缓冲流、数据流的原理及应用字符流的原理及应用多线程进程与线程的概念、查看线程对象Java内存模型线程的创建与启动:扩展Thread类、实现Runnable接口、实现Callable接口、线程池线程状态的转换:新建、就绪、运行、阻塞、死亡线程的调度:sleep、yield、join、interrupt、wait后台线程、定时任务线程的并发与同步、同步锁、同步块、线程安全的类Lock接口、CAS、volatile修饰符内部类成员内部类、本地内部类的应用匿名内部类的原理及引用、Lambda表达式设计模式基础设计模式概念、框架概念7大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则单例模式、工厂模式、模板模式、代理模式、装饰模式、适配器模式、外观模式、策略模式、观察者模式、命令模式、备忘录模式、观察者模式反射反射包Class类的使用反射获取类属性、方法、构造器通过反射创建类对象/通过反射调用方法反射的应用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值