20155327 java第四周学习笔记
五六章知识整理
1子类与父类
父类是接口或者是抽象类,子类必须继承自父类。
2子类的继承性
在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。在Java中不允许多继承。
3子类与对象:
1.子类要为父类的私有属性单独的在堆里开辟空间,这个空间不属于任何一个对象,原因是私有属性要使用必须要有个空间,并默认初始化,不会为父类的私有方法在堆里开辟空间,原因是私有方法在方法区。
2.为子类开辟空间,为继承自父类的属性开辟空间,并为在父类里定义的、子类继承的方法开辟方法空间,然后为子类新增的方法开辟空间,(继承的方法的空间和新增的属性和方法的空间)
3.一定会把子类的对象地址传到父类的构造方法,调用父类的构造方法,到类里头绑定的属性寻找并初始化,为子类继承的属性私有化,和为子类不能继承的属性私有化。若父类的构造方法是私有的,则子类对象不能创建,编译会出错
4.调用子类的构造方法可以初始化子类新增的属性,和继承父类的属性和方法初始化。
4成员变量的隐藏和方法重写
在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。
正是因为Java在继承中有方法的重写,所以,这也体现了Java的动态多态性。
5继承与多态
-
继承:是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于抽取多类事物的共性。java中的继承要使用extends关键字,并且java中只允许单继承,也就是一个类只能有一个父类。
-
多态,把子类对象主观的看作是其父类型的对象,那么父类型就可以是很多种类型。实现多态,有二种方式,覆盖,重载。
关系:继承可以复用代码,更大的用处是实现「多态」
封装是继承的基础,继承是多态的基础
「用父类声明对象引用,用子类生成对象」就有了多态
接口
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。
接口中成员的特点
1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解fnal关键字
2、接口中可以定义方法,方法也有固定的修饰符,public abstract
3、接口不可以创建对象。
4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
接口与多态
A:类与类之间:继承关系,一个类只能直接继承一个父类,但是支持多重继承
B:类与接口之间:只有实现关系,一个类可以实现多个接口
C:接口与接口之间:只有继承关系,一个接口可以继承多个接口
码云
课堂实践
实践一
0 在Ubuntu中用自己的有位学号建一个文件,教材p29 Example2_5
- 修改代码a[]中添加自己的学号,输入的数据中要有自己的学号
- 提交运行结果截图,要有找到和找不到的情况,要对边界值进行测试
实践二
0 在Ubuntu中用自己的有位学号建一个文件,教材p45 Example3_7
- 修改代码中的100为自己学号的后四位,输入的数据中要有自己的学号
- 提交运行结果截图
实践三
参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能
N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值
提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java SumofRecur 你的学号后四位
命令行参数:Java程序运行时,会调用main方法,args就是命令行参数。
代码如下:
public class test3 {
public static void main(String args[]){
int tmp[]=new int [args.length];
for(int i=0;i<args.length;i++){
tmp[i]=Integer.parseInt(args[i]);
}
long sum=0;
if(tmp[0]<=0){
System.out.println("wrong!");
System.exit(0);
}
for(int i=1;i<=tmp[0];i++){
sum += fact(i);
}
System.out.println(sum);
}
public static long fact(int i) {
if(i==1)
return 1;
else
return i * fact(i-1);
}
}
把代码推送到
实践四
1 参考 http://www.cnblogs.com/rocedu/p/6371262.html 调试上一个程序
2 通过命令行传入3
3 提交N=1 , N=2, N=3时的结果截图
JDB调试步骤:
1,使用javac -g test3.java对程序进行编译。注意javac中-g参数是为了产生各种调试信息,一定要加上,否则无法调试。
2,使用jdb test3 N对程序进行调试
3,通过运行stop in test3.main命令在main方法开始处设置断点
4.输入run命令来运行test3.class,程序会在main()的开始处停下。可以用locals命令查看变量,用step命令运行下一行代码
5.使用quit或exit可以退出JDB。