Java---------本周总结(多态、选择排序、内部类)

本文主要介绍了Java编程中的三个重要概念:多态性,详细阐述了其在继承和接口中的应用;选择排序算法的实现原理及步骤;以及Java中的内部类用法,包括匿名内部类和成员内部类。通过对这些概念的理解,可以提升Java编程能力。
摘要由CSDN通过智能技术生成

Part 1 多态

1.什么是多态,多态的前提条件?
		多态:一个事物在不同时刻体现出来的不同状态
		多态的前提条件:
			1)必须存在继承关系
			2)要有方法重写,子类需要去覆盖父类的功能!
			3)必须有父类引用指向子类对象!
					父类名 对象名 = new 子类名();  向上转型!
2.多态的成员访问特点?
		成员变量:编译看左,运行看左!
		成员方法:编译看左,运行看右!(存在方法重写!)
		静态的成员方法:编译看左,运行看左(不算方法重写,静态的东西都和类相关!)
		构造方法:分层初始化(父类先进行初始化,然后是子类初始化!)对数据进行初始化!

3.final关键字的特点? 
   final:状态修饰符,最终的,无法更改的!
   修饰类,该类不能被继承!  (JDK提供的String类:  final class String{})
   修饰成员变量,该变量此时是一个常量: (传统的自定义常量的格式:public static final 数据类型 变量名  = 初始化值)
   修饰成员方法,该方法不能被重写!

4.多态的好处以及多态的弊端,如何解决多态的弊端
好处:
		1)提高代码的复用性,由继承保证的!
		2)提高代码的扩展性,由多态保证!
		
弊端:
	不能访问子类的特有功能
	
		1)创建具体的子类对象 子类名 对象名 = new 子类名(); 
			这种方式,比较消耗内存空间(在堆内存中开辟新的空间!)
		2)使用向下转型:将父类的引用强制转换子类的引用:
				子类名  子类对象名 = (子类名)父类的引用;

5.java.lang.ClassCastException 是什么异常,出现的原因是什么?
		向下转型使用不当,会造成一个运行时期异常-->类转换异常!
		在向下转型的时候,堆内存的数据类型跟栈内存变量类型不一致!
				(必须是继承关系才可以)
		
6.形式参数如果是引用类型--具体的类,那么调用该方法的实际参数传递的是什么?
		需要传递该类的具体对象
		
		public viod make(Fruit fruit){		// 能创建子类对象 Fruit fruit = new Apple(); 父类引用指向子类对象
			
		}

7.接口和抽象类的区别?
	成员的区别:
		成员变量
			抽象类:可以是常量也可是变量
			  接口:只能是常量: 存在默认修饰符 public static final...
		成员方法:
			抽象类:可以抽象方法(没有方法体),也可以非抽象方法
			接口:只能是抽象方法,存在默认修饰符:public abstract
		构造方法:
			抽象类:存在构造方法,有参/无参,对数据进行初始化
			接口:没有构造方法的!
			
			
	关系的区别:
		类与类:继承extends,支持单继承,不支持多继承,可以多层继承
		类接口:实现implements,支持一个类继承另一个类的同时可以实现多个接口
		接口与接口:继承extends,支持单继承,也可以支持多继承!
		
		继承:存在一种局限性  ----> 面向接口编程!
	
	设计理念的区别:
		抽象类---->继承关系--->体现的是一种"is a"的关系!
		接口------>实现关系--->体现的是一种"like a"的关系!

8.形式参数如果是具体类,抽象类,接口分别调用方法应该如何传递?
		形式参数是具体类---->调用方法需要传递该类的具体对象!
				  抽象类---->调用方法需要传递该抽象类的子类对象!
				  接口------>调用方法需要传递该接口的子实现类对象!

9.方法的返回值如果是具体类,抽象类,接口分别调用该方法,如何返回?
		方法的返回值是具体类
						该方法需要返回该具体类的对象
					抽象类:该方法需要返回该抽象类的子类对象
					接口:该方法需要返回该接口的子实现类对象

10.static关键字的特点?
		static:
			1)随着类的加载而加载,类加载一次,static修饰的也就使用一次
			2)优先于对象存在
			3)static修饰的:被多个对象可以共用,被共享
			4)访问方式:推荐使用类名.成员变量/成员方法()
11.封装,继承,多态的三大特征分别是什么?
		封装的类----->实体类----->实体类中的这些属性需要和数据库表中的字段名称一一对应
		封装:将一个类中的属性私有化(保证的数据安全性,隐藏掉了),
				对外提供公共的访问方法setXXX(形参)/getXXX()方法
				
		继承:多个类中的共性内容抽取到一个独立的类中,然后产生一种关系;
		继承特点:
			子类继承父类,只能继承非私有的成员变量/成员方法,私有的成员间接的通过公共访问方法来访问!
			子类继承父类,子类的所有构造方法都默认访问父类的无参构造方法!(永远建议给出无参构造方法!)
		

Part 2 选择排序

1、选择排序的思想:
	使用0索引的元素依次和后面索引的元素比较,小的往前放
	第一次比较完毕,最小值出现在最小索引处,依次这样比较
在这里也顺便提一下冒泡排序思想:
	两两比较,将较大的值往后放,
	第一次比较完毕,最大值出现在最大索引处,依次这样比较
2、代码表示:这是选择排序、冒泡排序以及数组遍历的部分代码
//选择排序
	private 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[y];
					arr[y] = arr[x];
					arr[x] = temp;
				}
			}
		}
	}
	//冒泡排序
	private static void bubleSoft(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 printArray(int[] arr) {
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			if(arr[i]==arr[arr.length-1]) {
				System.out.println(arr[i]+"]");
			}else {
				System.out.print(arr[i]+" ,");
			}
		}
	}

Part 3 内部类

1.内部类的划分?如何通过外部类访问成员内部类的成员?
	成员内部类
 		在外部类的成员位置定义的类
 	局部内部类
 		在局部位置(外部类的成员方法中)定义的一个类
  通过外部类名.内部类名 对象名 = 外部类对象.内部类对象();

2.外部类如何访问静态的成员内部类的成员?
		外部类类名.内部类名 对象名  = new 外部类名.内部类名();
		
3.匿名内部类的格式是什么?它的本质是什么?
		new 类名/接口名(){
				重写方法;
		};
	匿名内部类的本质:继承了该类或者是实现了该接口的子类对象!
	
4.局部内部类访问局部变量,为什么这个局部变量JDK7以前要加上final修饰?
		局部变量的生命周期:随着方法调用而存在,随着方法调用完毕而消失.在
当前外部类成员方法方法中创建了局部内部类对象,访问里面局部变量.堆内存不会
立即被释放,依然在访问这个变量,需要将局部变量加上final,变成常量!
	//自定义常量 public static final int a = 100 ; 
	//编译时期常量  不通过JVM加载!
	public static final Integer i = new Interger(20) ; 
	//运行时期常量 (通过jvm加载Integer.class)
			
5.获取字节码文件对象的方式?  
		1:Object类中的getClass()方法---->Class对象 
									class 包名.类名				
反射中:
		2)任意Java类型的class属性!
		3)Class类中存在静态功能:forName("一个类的全限定名称") ; (推荐的方式)
6.分别阐述一下四个权限修饰符在不同情况下的访问权限问题?
	public: 对外公开,可以在任何地方访问;
	protected:当前包下及子类可以访问;
	默认:没有访问控制修饰符,同一个包中可以访问;
	private:只有当前类可以访问		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值