Java第四次作业
一 . 学习总结
1.使用XMind
- 截图:
2.构造方法的继承原则
- 此程序有错误,因为构造函数调用必须是构造函数中的第一个语句
- 修改后的程序
class Grandparent {
public Grandparent() {
System.out.println("GrandParent Created.");
}
public Grandparent(String string) {
System.out.println("GrandParent Created.String:" + string);
}
}
class Parent extends Grandparent {
public Parent() {
super("Hello.Grandparent.");
System.out.println("Parent Created");
}
}
class Child extends Parent {
public Child() {
System.out.println("Child Created");
}
}
public class Test10 {
public static void main(String args[]) {
Child c = new Child();
}
}
- 程序的运行结果
GrandParent Created.String:Hello.Grandparent.
Parent Created
Child Created
- 在继承中,子类对象的实例化的要求就是子类对象在实例化之前必须先调用父类中的构造方法,再调用子类的构造方法,继承就是先有父类才有子类,子类不是凭空出现的,所以必须先调用父类构造方法,再调用子类构造方法,其顺序是不可以反过来的。
3.多态的使用方法
- 存在错误:
- 没有为类型 Animal 定义方法sleep()
- 类型不匹配:不能从 Animal 转换为 Dog
- Exception in thread "main" java.lang.ClassCastException: Test10.Animal cannot be cast to Test10.Dog
at Test10.Test10.main(Test10.java:36)
第一个错误:
Animal animal = new Dog(); //发生向上转型
animal.shout(); //调用Animals类的方法成功,因为Animals类有此方法
animal.sleep(); //调用Animals类的方法失败,因为Animals类没有此方法
第二个错误:
Dog dog = animal; //没有把Animals类的对象进行强制转化,进行向下转型
第三个错误:
dog = (Dog)animal2;//没有为Dog类的对象dog进行声明,声明后,应该进行向上转化或者没有为Animals类的对象进行声明,声明后,应该进行向下转化
- 修改后的代码:
class Animal{
void shout(){
System.out.println("动物叫!");
}
}
class Dog extends Animal{
public void shout(){
System.out.println("汪汪......!");
}
public void sleep() {
System.out.println("狗狗睡觉......");
}
}
public class Test10{
public static void main(String args[]) {
Animal animal = new Dog(); //向上
animal.shout();
((Dog) animal).sleep();//向下
Dog dog = (Dog)animal;//向下
dog.sleep();
Animal animal2 = new Animal();
animal2 = dog;
dog = (Dog) animal2;//向下
dog.shout();
// Animal animal2;
//Dog dog1 = new Dog();
// animal2 = dog1;
//dog.shout();
}
}
- 运行结果:
汪汪......!
狗狗睡觉......
狗狗睡觉......
汪汪......!
4.
-
(1)对于运行结果的解释:
toString()源码:public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
说明不管是否调用toString()方法,都会自动调用此方法进行信息的打印
-
(2)对于结果的证明:
此运行结果是随机产生的地址
源码:public void println(Object x) { String s = String.valueOf(x);//如果x为空则返回空,不空则返回调用toString的内容 synchronized (this) { print(s); newLine(); } }
-
(3)添加方法之后,运行结果如下:
姓名:张三,年龄:20
姓名:张三,年龄:20
添加toString()方法后,就会对实例化后的信息进行输出,因为String是Object的子类,String对父类进行了方法的覆写,所以可以进行信息的输出
5.其他知识总结
- 对于XMind的使用方法:
- 首先,新建空白图,会自动创建一个中心主题
- 其次,右击中心主题进行插入主题,若需要多个同级主题,点击新建主题,按回车,就可新建新的主题
- 然后,按insert,可以新建下一级主题,delete可以删除不需要的主题
- 最后,如果对于你的主题想要进行详细介绍,可以进行插入备注操作,也可以插入标注。
二 . 实验总结
1.定义员工类,定义管理层类,继承员工类,定义职员类,继承员工类,定义一个测试类,进行测试
-
程序设计思路:
按照要求进行建员工类,管理层类,职员类,测试类,注意管理层类,职员类要继承员工类 -
问题1:继承员工类的注意事项
-
解决方案:
首先明白继承的含义与定义格式,子类继承父类的对象之后,在子类的有参构造方法里要传你所需要父类的参数,并在方法体中,用super关键字进行调用父类的属性 -
类图
2.立体抽象类,平面抽象类,三角形,矩形,圆的平面子类,球,圆柱体,圆锥体的立体子类,测试类
-
程序设计思路:
按照要求创建立体抽象类,平面抽象类,三角形,矩形,圆的平面子类,球,圆柱体,圆锥体的立体子类,测试类 -
问题1:抽象类的使用与含义,继承的真正含义
-
解决方案:
首先明确抽象类的定义格式,子类公有属性,要在父类中声明,子类继承,不要在子类重复声明,抽象类的抽象方法没有方法体,子类必须覆写抽象类的抽象方法 -
类图
3.饲养员类,动物类,猴子,狮子,鸽子类,测试类
-
程序设计思路:
创建饲养员类,动物类为父类,猴子,狮子,鸽子为子类,还有一个测试类 -
问题1:明确你的程序要干嘛,怎么实现,先有个明确的框架再实现具体功能
-
解决方案:
在饲养员对对象进行向上转型,循环调用动物吃的方法,在测试类对各种动物的对象进行实例化,然后进行输出
三 .代码托管
- 码云commit历史截图
四 .学习进度条
进程 | 代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 500/500 | 45/45 | 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中 |
第5周 | 200/700 | 15/55 | 学习了老师要求的内容 |
第6周 | 300/1000 | 15/70 | 学习了作业中要求的内容 |
第7-8周 | 200/1200 | 15/85 | 掌握了本次学习的全部内容 |