Day2


本章总结
Ø  继承是Java中实现代码重用的重要手段之一。Java中只支持单继承,即一个类只能有一个直接父类。Java.lang.Object类是所有Java类的祖先。
Ø  在子类中可以根据实际需求对从父类继承的方法进行重新编写,称为方法的重写或覆盖。
Ø  子类中重写的方法和父类中被重写方法具有相同的方法名、参数列表,返回值类型必须和被重写方法的返回值类型相同或者是其子类。
Ø  如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
Ø  抽象类不能实例化。抽象类中可以没有,可以有一个或多个抽象方法。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。
Ø  用final修饰的类,不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变成常量,只能赋值一次。
 
 
 

本章作业
一、选择题
1.给定如下Java代码,下列( AD )选项可以加入到Sub类中,并能保证编译正确。
class  Super  {
   public  float  getNum()  {
      return  3.0f;
   }
}
Public  class  Sub  extends  Super  {
 
}
A. public  float  getNum(){return  4.Of;}
B. public  void  getNum() { }
C. public  getNum(double  d)  { }
D. public  double  getNum(float  d){return  4.Od;}
 
 
2.编译运行如下Java代码,以下说法正确的是(A  )。
class  Base {
   private  String  name;
   public  Base()  {
      name=“Base”;
   }
Public void method()  {
     System.out.println(name);
   }

class  Child  extends  Base  {
   public  Child()  {
      name=“cc”;
   }
}
public  class  Sample
   public  static  void  main(String[ ]  agrs)  {
      Child  c=new  Child();
      c.method();
   }
}
A. 发生编译期错误
B. 正常运行,输出结果:Base
C. 正常运行,输出结果:Child
D. 正常运行,输出结果:cc
 
3.在子类的构造方法中,使用(B  )关键字调用父类的构造方法。
A. base
B. super
C.  this
D. extends
 
 
4.编译运行如下Java代码,输出结果是( C )。
class  Base  {
   private  String  name;
   public  Base()  {
      name=“Base  constructor”;
   }
   public  Base(String  pName)  {
      name=pName;
   }
   public  void  method()  {
      System.out.println(name);
   }
}
class  Child  extends  Base  {
   public  Child()  {
      super(“Child  constructor”);
   }
   public  void  method()  {
      System.out.println(“Child  method”);
   }
}
public  class  Sample  {
   public  static  void  main(String[ ]  args)  {
      Child  c=new  Child();
      c.method();
   }
}
A. Base  constructor
B. Child  constructor
C. Child  method
D. 以上均不正确
 
 
 
5.下列选项中关于Java中抽象类和抽象方法说法正确的是( C )。
A. 抽象类中不可以有非抽象方法
B. 某个非抽象类的父类是抽象类,则这个类必须重载父类的所有抽象方法
C. 抽象类无法实例化
D. 抽象方法的方法体部分必须用一对大括号{ }括住
二、简答题
1、给定如下Java代码,编译运行后,输出结果是什么?并解释原因。
class  Base  {
   public  Base() {
      System.out.println(“Base”);
   }
}
class  Child  extends  Base  {
   public  Child() {
      System.out.println(“Child”);
   }
}
public  class  Sample  {
   public  static  void  main(String[ ]  args)  {
      Child  c=new  Child();
   }
}
输出:Base
Child
如果继承父类的子类没有显示的调用super();子类的构造函数中仍然会自动先调用父类的无参构造函数。

2.请指出如下Java代码中存在的错误,并解释原因。
class  Base  {
   public  void  method() {
   }
}
class  Child  extends  Base{
   public  int  method() {
   }
   private  void  method() {
   }
   public  void  method(String  s) {
   }
}

 子类重写权限不能比父类低,父类public 子类不能private
 
3.请指出如下Java代码中存在的错误,并改正。
class  Base  extends  Object  {
   private  String  name;
   public  Base() {
      name=“Base”;
   }
}
 
class  Child  extends  Base  {
   public  Child() {
      super(“Child”);
   }
}
public  class  Sample  {
   public  static  void  main(String[ ]  args)  {
      Child  c=new  Child();
   }
}
 Java中不支持多继承。
 
4.请指出如下Java代码中存在的错误,并解释原因。
class  Other  {
   public  int  i;
}
class  Something  {
   public  static  void  main(String[ ]  args)  {
      Other o=new  Other();
      new  Something().addOne(o);
   }
   
   public  void  addOne(final  Other  0)  {
      o.i++;
      o=new  Other();
   }
}
 已经申明一个o对象,重复
 
5.设计Bird、Fish类,都继承自抽象类Animal,实现其抽象方法info(),并打印它们的信息,参考运行结果如图2.21所示。要求画出类图。
 
 
 
 
 
——提示———————————————————————————————————
定义抽象类Animal,具有age属性、info()方法。
定义Bird类、具有本身的特有属性、color。
定义Fish类,具有本身的特有属性weight。
———————————————————————————————————————


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值