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

  1. 修改代码a[]中添加自己的学号,输入的数据中要有自己的学号
  2. 提交运行结果截图,要有找到和找不到的情况,要对边界值进行测试

    20155327 java第四周学习笔记-LMLPHP

实践二

0 在Ubuntu中用自己的有位学号建一个文件,教材p45 Example3_7

  1. 修改代码中的100为自己学号的后四位,输入的数据中要有自己的学号
  2. 提交运行结果截图

    20155327 java第四周学习笔记-LMLPHP

实践三

参考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 你的学号后四位

20155327 java第四周学习笔记-LMLPHP

命令行参数: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。

20155327 java第四周学习笔记-LMLPHP

20155327 java第四周学习笔记-LMLPHP

20155327 java第四周学习笔记-LMLPHP

05-07 09:52