1.构造函数的主要作用是什么?
作用:在创建对象时初始化对象,为对象成员变量赋初值。
调用时:子类——>父类——>祖类
输出时:祖类——>父类——>子类
在子类调用构造函数时必须调用父类的构造函数,调用是逐级往上调用,输出时就逐级从最高往下输出。
2.自行编写代码测试以下特性:在子类中,若要调用父类中被覆盖的方法,可以使用super关键字.
1 public class FatherAndSon { 2 3 public static void main(String args[]) { 4 FatherAndSon s=new FatherAndSon(); 5 s.Test(); 6 } 7 public void Test() { 8 Son s=new Son(); 9 s.test(); 10 11 } 12 class Father {//声明父类 13 public void test() {//声明父类中的测试代码 14 System.out.println("father"); 15 16 } 17 } 18 class Son extends Father{//声明子类,并继承父类 19 public void test() {//覆盖父类的测试类 20 System.out.println("son"); 21 super.test();//使用super调用父类的测试类 22 } 23 } 24 }
当super被注释时的输出,父类的测试类没有输出,也就没有被调用。
调用super时的输出,明显父类的测试类也被调用了,说明当父类中的方法被覆盖的时候,要想访问父类中方法就要使用super字符。
3.
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m = null;
Dog d=new Dog();
Cat c=new Cat();
m=d;//把子类赋予给父类不会出错
//d=m; //将父类赋给子类会报错
d=(Dog)m;//先强制转化为父类再赋值不会报错
//d=c;
c=(Cat)m;
}
}
{
public static void main(String args[])
{
Mammal m = null;
Dog d=new Dog();
Cat c=new Cat();
m=d;//把子类赋予给父类不会出错
//d=m; //将父类赋给子类会报错
d=(Dog)m;//先强制转化为父类再赋值不会报错
//d=c;
c=(Cat)m;
}
}
引起编译错误的是,因为类型不匹配,所以系统提示编译错误。