今天论坛上看到的,正好复习一下多态继承重载(overload)覆盖(override)等概念。
一道小题考的问题挺多挺细的。
先上题再说。
package javaSE;
public class TestExtends {
public static void main(String[] args) {
Dog dog = new Dog();
dog.call();
MiniDog mini = new MiniDog();
mini.call();
Dog d = (Dog) mini;
d.call();
// System.out.print(d.getName());
}
}
class Dog {
private String getName(){
return "Dog";
}
public String bark(){
return "wang-wang";
}
public void call(){
System.out.println("I'm " + getName() + " " + bark());
}
}
class MiniDog extends Dog {
public String getName(){
return "Mini";
}
public String bark(){
return "WOO";
}
}
运行结果:
I'm Dog wang-wang
I'm Dog WOO
I'm Dog WOO
Call方法体现的是继承概念,private变量和方法是不能被子类继承的。而mini又没有覆盖Dog的call方法,所以在调用call时实际上是调用了父类的call。而对于父类的Call只有父类本身的getName是可以见的,即使mini中定义getName为public因为没有覆盖,父类的中是不可能看到子类定义的方法的.
而bark体现对引用的概念,引用类似于指针,其指向对象中函数的定义与属性不会因为指针的改变而改变。