1.接口不是类,不能使用new进行实例化
2.使用instanceof运算符,能够查看该对象是否实现了Comparable接口
3.接口能够扩展extends
4.接口中能够包含常
5.一个类能够实现多个接口
参考资料:java
百度脑图
XMind编程
Q1.代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件可否编译经过?哪句会出现错误?试改正该错误。并分析输出结果。
A:数组
package parent; public class OutOfParentPackage{ public static void showParentj(Parent p){ System.out.println(p.j); System.out.println(p.geti()); p.getj(); } } class Parent{ private int i=1; protected int j=2; protected int geti(){ return i; } public void getj(){ System.out.println(j); } } class Other{ public static void showParentj(Parent p){ System.out.println(p.j); System.out.println(p.geti()); } } public class Child extends Parent{ public static void main(String[] args){ Parent p = new Parent(); Child c = new Child(); c.getParenti(); c.getParentj(); Other.showParentj(p); } public void getParenti(){ System.out.println(i); } public void getParentj(){ System.out.println(super.j); System.out.println(j); System.out.println(geti()); System.out.println(super.geti()); } }
不能经过编译;这一句System.out.println(i);
会出错;应将private
改成protected
;结果以下
数据结构
1.2 另一个包中的OutOfParentPackage.java,可否编译经过?提示什么错误?分析缘由。
A:不能经过编译;提示的错误是The type Parent is not visible;缘由是Parent类不是public的学习
Q2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
A:在被改造以前,整个代码未使用抽象类,因此输入输出都由控制台控制,然而在改造以后,在GuessGame类中,输入输出均是抽象类,因此能够在控制台输入输出也能够在图形界面输出
2.2 若是想将该游戏改形成图形界面,应该进行一些什么操做?
A:先导入java.swing.*包,而后调用包里的方法开始界面设计;接着设计一个用来猜数字的图形界面的类而且继承Guess中的抽象类;最后重写抽象类当中的抽象方法
2.3 结合该例子,你以为何时应该使用abstract?
A:包含抽象方法的类叫作抽象类,就须要使用abstract,abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时能够以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类自己也是抽象类。我以为抽象类像是一个模板,有了抽象类,就能让不少方法在此基础上不断延伸和拓展,因此当有多个不一样的方法来执行同一种功能时能够用上abstract,这样会方便些
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
A:在这个例子中,变化的是输入的方法,能够采用不一样的方法输入,如从控制台输入、从对话框图形界面输入等等。不变的是抽象方法,它可使用不一样方法的输入、输出,完成一个猜数的游戏。咱们根据需求的不一样来具体决定到底使用何种输入输出方法。这个类是抽象的,即没有具体的输入、输出的的方法这个游戏就没有办法进行。因此咱们要有具体的方法来实现,而具体的实现要经过继承来完成。由于抽象类的抽象方法是没有具体定义的,也就是说一个抽象类,没有别的类去继承它,就很没有意义。因此咱们要有不是抽象类去实现抽象类的抽象方法。这个实现的过程就是继承,继承抽象类的方法,而后经过复写的形式来具体实现方法的细节
Q3.Comparable与Comparator
3.1 描述Comparable接口的用途。为何某个类实现了Comparable接口就能够直接使用Arrays.sort对其进行排序?
A:Comparable接口将比较代码嵌入自身类中。在开发中咱们可能会遇到须要将一些对象有序的放入到集合中,这时候咱们只须要让类实现java.lang.Comparable
public int compareTo(T o);
一个方法,因此覆盖compareTo这个方法便可实现自动排序,这样就不用本身写一个排序的方法
3.2 有了Comparable接口为何还须要Comparator接口呢?
A:Comparable接口和Comparator接口,两个都是用来实现集合中元素的比较、排序的。Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,Comparable接口是一个对象自己已经支持自比较所须要实现的接口。Comparator是一个另写一个外部类来实现的比较的接口
Q4.面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每一个类与接口的做用。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
A:StudenDaoListImpl使用动态容器ArrayList,而StudentDaoArrayImpl使用的是固定了大小为80的数组
Q5.什么是面向接口编程?面向接口编程的好处是什么?
A: 面向接口编程关注的是不一样的类是否有共同的方法,不关心对象自己。题目3用到Comparable和Comparator两个接口,经过这两个接口,咱们能够很方便地对本身定义的类进行比较,从而调用Arrays里面已经写好的sort()方法来排序。这个过程至关于面向接口编程。题目4也是如此,在Test类里面,咱们只要关心数据究竟是以何种数据结构来存放,不须要管具体的底层实现。用列表,数组均可以实现写入学生数据、读取学生数据和遍历学生信息的操做。这样一来就很方便,就如计算机的UAB接口,不论是要接U盘仍是手机类的外设,只关心接口一致就能够,至于内容就无论。这样就无须知道对象是用什么类来实现的,只须知道定义接口的抽象类。3d
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类code
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 而后搜索并截图
对象
经过实验熟练的掌握了Comparable接口和编写comparaTo方法。blog