继承,多态(抽象类多态,接口多态),内部类(匿名内部类)排序算法之选择排序

继承

1.概念:
需要定义一个类将其他类的共性内容抽取到该独立类中,让其它类与这个独立类产生一种关系
2.格式
子类 extends 父类名{}
3.好处及特点
好处:
1)提高了代码的复用性
2)提高了代码的维护性
3)类和类产生的这种关系,是多态的前提条件
特点:
1)Java语言中,类与类只支持单继承,不支持多继承
2)虽然不支持多继承但是类与类之间可以支持多层继承的
4.继承中,子类和父类的成员变量名称一致时的执行流程:
1)先在子类的局部位置找,如果找到就使用
2)如果找不到,就在子类的成员变量找,找到了就使用
3)如果找不到,就在父类的成员位置找,找到了就使用
4)如果还找不到就报错了
5.关于继承中构造方法的关系:
子类是不能继承父类的构造方法的,但是通过super()来访问父类的构造方法在继承中,子类中所有的构造方法都默认访问父类的无参构造方法,相当于子类的所有构造方法的第一句话隐藏了super();
6.如果父类的无参构造没有提供,那么子类构造会出现什么情况:
子类所有的构造方法默认访问父类的无参构造方法,父类如果没有提供报错
解决方法:
1)手动给出父类的无参构造方法
2)现在手动不提供无参构造
a)间接通过super(xxx)来访问父类的有参构造方法
b)通过this()访问子类的无参构造方法然后再通过子类的无参构造方法里面的super(xxx)简介访问父类有参

方法重写(override)

1.概念
在继承中,子类会出现和父类一模一样的方法,这个时候子类会将父类的该功能覆盖掉,将这种现象称为方法重写
2.方法重写(override)和方法重载(overload)的区别
方法重载:方法名相同,参数列表不同,与返回值无关
参数列表不同:
1)形式参数的数据类型是否相同
2)参数个数是否相同
方法重写:子类出现和父类一摸一样的方法申明,权限修饰符返回值类型,方法名形式参数都相同

关键字final

1.final:
被final修饰的成员方法是不能被子类重写的
2.final的特点:
1)可以修饰类:该类不能被继承
2)可以修饰成员变量:此时变量就是常量,如果该变量是一个基本类型的变量,变量的值不能在改变,如果该变量是一个应用类型,被final修饰了,那么该对象不能再重新开辟对内存空间了

多态

1.概念
一个事务在不同时刻的体现
2.多态的前提条件:
1)必须有继承
2)方法重写,子类继承父类,将父类功能覆盖掉,使用子类的具体功能
3)父类引用指向子类
父类名 对象名=new 子类名();
3.成员访问特点:
成员变量:
编译左边,运行看左边
成员方法:
编译左边,运行看右边
静态的成员方法
编译看作运行看左
构造方法
存在继承关系
4.多态的好处:
1)提高了代码的复用性
2)提高了代码的扩展性

抽象类

1.概念
在一个类中,如果该类中存在一个功能,仅仅是方法声明,没有方法体(抽象方法),需要将该类定义为抽象类
2.特点:
1)如果一个类中有抽象方法,那么该类一定是抽象类;如果一个类是抽象类,那么该类不一定有抽象方法
2)抽象类不能实例化(不能创建对象)
3)抽象类不能实例化,抽象类需要通过子类实例化,父类引用指向子类对象:抽象类多态
4)抽象方法的格式:没有方法体的方法
权限修饰符 abstract 返回值类型 方法名(形参列表);
3.抽象类的成员特点:
1)成员变量:既可以定义为一个常量,也可以定义为变量
2)成员方法:既可以定义抽象方法,也可以定义非抽象方法
3)构造方法:存在构造方法,既可以有参构造也可以无参构造
4.abstract关键字不能和那些关键字共用(定义方法的时候):
1)和final关键字冲突:final修饰的成员方法不能被重写
2)和private关键字冲突:私有方法不能被继承
3)和static关键字冲突:static修饰的成员方法跟类相关,随着类的加载而加载,show方法是一个抽象方法,没有方法体,加载进内存没有意义

接口

1.概念
体现的是事物的一种扩展性功能(本身不具备,经过一些学习才能具备的功能)
2.接口的注意事项:
1)接口中只能定义抽象方法
2)接口不能实例化
3)接口通过接口的子实现类来进行实例化
一般开发定义接口的子实现类的时候,类名 接口名+impl
接口和子实现类之间的关系:实现关系(implements)
格式:接口名 对象名=new 子实现类名();接口多态
3.借口的成员特点:
成员方法:只能是抽象方法,存在默认的修饰符public abstract
成员变量:只能是常量,存在默认的修饰符:public static final
构造方法:不存在构造方法
4.抽象类和借口的区别
1)成员的区别
成员变量
抽象类:既可以定义常量也可以定义变量
接口:只能定义常量
成员方法:
抽象类:既可以有抽象方法也可以有非抽象方法
接口:只能由抽象方法
构造方法:
抽象类:既有有参构造;也有无参构造
接口:没有构造方法
2)关系的区别
类与类:不管这个类是抽象类还是具体类,都是继承关系
类与接口:实现关系,一个类继承另一个类的同时可以实现多个接口
接口与接口:支持单继承以及多继承
3)设计理念:
抽象类:在抽象类多态中使用,存在继承关系
接口:体现事物的扩展功能

内部类

1.概念
就是一个类中定义另一个类;在A类中定义一个B类,那么 B类就是A类的内部类,A类就是B类的外部类;内部类是可以访问外部类的成员,包括私有
2.分类:
成员内部类/局部内部类/匿名内部类

成员内部类

在测试类中要访问内部类的成员(非静态)一般成员内部类都默认非静态
1.访问方式
外部类名.内部类名 对象名=new 外部类名().new内部类名();
2.成员内部的一些修饰符
private:能够保证内部类的数据的安全性
static:静态的成员内部类,被static修饰的成员内部类:它里面的成员方法只能访问外部类中的静态成员,内部类中的成员可以静态也可以非静态
在测试类中静态的成员内部类中的成员访问方式:
外部类名.内部类名 对象名=new 外部类名.内部类名();
非静态的内部类中不能存在静态的变量

局部变量

在局部位置定义的类
1.特点
1)可以直接访问外部类的成员,包括私有
2)在外部类的成员方法中,可以通过创建局部内部类的对象来访问局部内部类的成员
2.jdk’7以后局部变量会自动加上final,开发者不需要定义final关键字为什么?
局部变量的生命周期随着方法的存在而存在,随着方法的调用完毕而消失,而当前这个局部变量被局部内部类再访问,再堆内存中对象不会立即回收,他还在继续使用这个变量,
需要将这个变量变为常量,常驻内存。

匿名内部类

1.概念
是内部类的简化方式(一般都是在局部内部类)
2.格式
new 类名/接口名(){
重写方法
};
3.匿名内部类的本质是什么?请使用示例代码体现
本质:继承该类或者实现该接口的子类对象


interface B{
	public abstract void show();
}
class A{
	public void method(){
		new B(){
			public  void show(){
				System.oput.println();
			}
		};
	}	
}

选择排序

1.概念
使用0角标对应的元素一次和后面角标对应的元素进行比较,把小的往前放,第一次比较完毕,最小值就出现在最小索引处,一次这样比较,可以得到排好序的数组
2.规律
1)使用0索引的原申诉一次和后面索引对应的元素比较
2)总共比较次数:length-1
3代码实现

public class Arr {
	public static void main(String[] args) {
		int[] arr= {15,10,30,25,40};	
		//调用方法
		paiXu(arr);
		arrPrint(arr);
		maoPao(arr);
		arrPrint(arr);
	}
	//对数组进行遍历
	public static void arrPrint(int[] arr) {
		System.out.print("{");
		for(int x=0;x<arr.length;x++) {
			if(x==arr.length-1) {
				System.out.print(arr[x]+"}");
			}else {
				System.out.print(arr[x]+", ");
			}
		}
	}
	//冒泡排序
	public static void maoPao(int[] arr) {
		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;
				}
			}
		}
	}
	//选择排序
	public static void paiXu(int[] arr) {
		for(int x=0;x<arr.length-1;x++) {
			for(int y=x+1;y<arr.length;y++) {
				if(arr[y]<arr[x]) {
					int temp=arr[x];
					arr[x]=arr[y];
					arr[y]=temp;
				}
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值