动手动脑3

一、继承条件下的构造方法调用

运行 TestInherits.java 示例,发现通过调用子类,最后运行时基类的构造方法也调用了。

将grandparents中修改通过调用子类来调用显示另一个构造函数,得将其修改为 public grandparents().

为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

从构造函数的作用上想,子类继承父类,父类继承他的父类,故在调用子类的构造方法之前,子类得找寻到父类的构造方法,父类找到他的父类。

二、神奇的“+”号

运行Fruit.java实例,发现结果为f=Fruit toString.一个字串和一个对象“相加”。

结论: 在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ + hashCode”。为了返回有意义的信息,子类可以重写toString()方法。

三、方法覆盖(override)”的要点

请自行编写代码测试以下特性(动手动脑):

package TEST;

public class JCC {
public static void main(String[] args)
{
monkey m=new monkey();
m.eat();
m.feat();
}
}
class animal
{
void eat()
{
System.out.println("吃饭。");
}
}
class monkey extends animal
{
void eat()
{
System.out.println("吃香蕉。");
}
void feat()
{
super.eat();
}
}

子类方法eat()覆盖了父类中方法eat(),在子类中用super调用父类中的eat()。

四、类型转换

Mammal m=null ; Dog d=new Dog(); Cat c=new Cat();

m=d; d=m; d=(Dog)m; d=c; c=(Cat)m;

d=m,d=c   出现编译错误。

五、在实践中理解把握复杂的知识

运行ParentChildTest.java示例,显示结果为:

Parent.printValue(),myValue=100
Child.printValue(),myValue=200
Child.printValue(),myValue=200
Child.printValue(),myValue=200
Child.printValue(),myValue=201

第一个和第二个结果没有异议,第三个结果是子类赋值给父类,然后父类的myvalue++对子类输出结果没有影响仍为200,最后对父类进行强制转换为子类,子类中的myvalue++,影响结果为201。

六、为什么使用多态?

简单的说多态就是实现使用同样的方法做不同的事情,这个情况在现实广泛存在,比如使用彩色打印机可以打印出彩色图像,使用单色打印机只能打印出单色的东西。而计算机程序就是为了解决现实的问题而存在的,它要能将现实中出现的问题还原到计算机中并加工处理。多态是继承/方法覆盖/方法重载的结合,有了多态,程序可以实现动态绑定。

原文地址:https://www.cnblogs.com/jccjcc/p/9890475.html