冒泡排序、继承、抽象类、方法重载
程序员文章站
2024-02-17 17:01:52
...
冒泡排序
冒泡排序是一种比较简单的排序算法,它循环走过需要排序的元素,依次比较相邻的两个元素,如果顺序错误就交换,直至没有元素交换,完成排序。
算法简介:
1.比较相邻的元素,前一个比后一个大(或者前一个比后一个小)调换位置
2.每一对相邻的元素进行重复的工作,从开始对一直到结尾对,这步完成后,结尾为做大或最小的数.
3.针对除了最后一个元素重复进行上面的步骤。
4.重复1-3步骤直到完成排序
动图演示:
代码实现:
int[] arr = {11,7,23,15,12,56,29};
//要比较的轮数
for(int x=0;x<arr.length-1;x++) {//每次要比较两个数,当前的数和后一个数,当比到最后一个的时候(当前),就不存下一个
//控制次数
for(int y=0;y<arr.length-1-x;y++) {
//如果当前的值比后一个值大
if(arr[y]>arr[y+1]) {
//两两比较互换位置
int temp = arr[y];
//将后一个值覆盖前一个下标对应的值
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
//遍历排序后的数组
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
继承
继承 :
就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
好处
提高代码的复用性
类与类之间产生了关系
继承的格式
通过extends关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父类 {
...
}
class 子类 extends 父类 {
....
}
代码实现:
/**
* 定义员工类Employee,做为父类
*
*/
public class Employee {
String name; // 定义name属性
// 定义员工的工作方法
public void work() {
System.out.println("尽心尽力地工作");
}
}
/**
* 定义讲师类Teacher 继承 员工类Employee
*
*/
class Teacher extends Employee {
// 定义一个打印name的方法
public void printName() {
System.out.println("name=" + name);
}
}
/**
* 定义测试类
*
*/
public class ExtendDemo01 {
public static void main(String[] args) {
// 创建一个讲师类对象
Teacher t = new Teacher();
// 为该员工类的name属性进行赋值
t.name = "小明";
// 调用该员工的printName()方法
t.printName(); // name = 小明
// 调用Teacher类继承来的work()方法
t.work(); // 尽心尽力地工作
}
}
super关键字:
super代表当前的父类对象,在子类中使用super可以调用父类的方法,属性和构造方法。
- 调用父类中的构造方法。
- 在子类中调用父类被覆盖的方法和属性。
抽象类
抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。
而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。
abstract class A{//定义一个抽象类
public void fun(){//普通方法
System.out.println("存在方法体的方法");
}
public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
}
方法重载
方法重载:
在同一个类中,方法名相同,参数列表不同(参数位置、参数个数、参数类型),与返回值类型无关
方法重写:
在继承或实现的关系下,方法名相同,参数列表相同,返回值类型相同,子类的修饰符权限要大于或等于父类中的修饰符权限
方法重写的注意事项:
-
1.父类中私有的方法不能被重写。
-
父类私有的方法不能被继承。
-
2.子类重写父类的方法时,访问权限不能更低,最好保持一致。
什么情况下需要重写父类中的功能呢?
- 当子类有自己的特殊实现形式时,此时就可以重写父类中的功能,如果没有特殊实现就不需要重写(此时的重写不是必须的)
class Phone{
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
class NewPhone extends Phone{
public void call(String name){
// System.out.println("给"+name+"打电话");
super.call(name);
System.out.println("可以听天气预报...");
}
}
public class ExtendsDemo2 {
public static void main(String[] args) {
NewPhone np = new NewPhone();
np.call("宝宝");
}
}