A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 shenqi 于 2013-5-6 17:56 编辑

覆盖也称为重写(override),是指子类的方法覆盖父类的方法,首先来看下代码:
class SuperClass{
      public void eat(String s){
           System.out.println("吃饭");
      }
}
class ChildClass extends SuperClass{
      @Override
      public void eat(String s) {
                 System.out.println("吃面");
      }
}
这是一个简单的子类重写父类的方法.来看下有什么注意事项:
首先把一个方法分为5个部分 : publicvoideat(④String ⑤s)
①     在子类重写方法时修饰符必须比父类的大.
a)         例如:
class SuperClass{
       protected void eat(String s){
              System.out.println("吃饭");
       }
}
class ChildClass extends SuperClass{
       @Override
       public void eat(String s) {
                     System.out.println("吃面");
       }
}
b)        切忌不可反过来,例如:
class SuperClass{
       ×public void eat(String s){
              System.out.println("吃饭");
       }
}
class ChildClass extends SuperClass{
       @Override
   ×private void eat(String s) {
                     System.out.println("吃面");
       }
}
这样的写法是错的!
也就是说子类不可以缩小父类的修饰符的权限.权限的大小:private < protected < public,假如父类中没有修饰符,那子类在重写时也不能带修饰符.\
②  返回值:必须和父类一摸一样,否则编译不通过.
③  方法名:必须和父类一摸一样,否则编译不通过.
④  局部变量类型:必须和父类一摸一样,否则编译不通过.
⑤  局部变量名:可以随意写,不用和父类相同也可以.
补充:对于一个类是否重写了父类的方法,可以使用@Override在定义在方法名上,检查方法是否重写了,如果没有则编译时就报错减少排错的工作.@这种格式开头的称为注解.详细知识可以参考张孝祥老师的Java高薪技术.

1 个回复

倒序浏览
本帖最后由 shenqi 于 2013-5-6 17:57 编辑

代码执行顺序:
Java中的代码一般都是顺序执行的,但是有些情况下却不一定如此:
Java中对于编译时异常我们通常使用try{}catch(Exception e){}这种方法捕获.
代码:
package cn.itcast.itheima;
import java.io.*;
public class TryCatchTest {
        public static void main(String[] args) {
                TryCatchTest tct = new TryCatchTest();
                try {
                        tct.test();    ------ 1
                } catch (Exception e) {
                        e.printStackTrace(); ------- 2
                }
        }
        public void test() throws IOException{
                File f = new File("");
        }

}
当代码执行到 1 的位置如果抛出异常则会跳转到 2 继续执行,所以证明并不是所有的执行顺序都是顺序执行的.假如以上代码中还有finally{}代码块,则在try{}块出现异常会先跳转到catch{}代码块执行,执行完后再到块.finally{}.finally{}是必定执行的代码块,无论程序出不出异常都一定会执行的,这点必须记住.

throw与throws:
throw是Java的关键字,用于声明方法内有单个异常抛出. 且调用者无需捕获.
例如:
class Student{
        private String name;
        private int age;
        public Student(String name,int age){
                if(name ==null || name == "")
                        throw new NullPointerException();
                this.name = name;
                this.age = age;
        }
}
throws 同样是Java的关键字,但该关键字用于声明抛出一组异常.调用者必须捕获该异常.例如:
class ThrowsTest{
        public void test() throws FileNotFoundException, SocketException{
                File f= new File("");
                FileReader fr = new FileReader(f);
                DatagramSocket s = new DatagramSocket(9999);
        }
}
throw和throws总结:
1.对于方法中假如有多个异常抛出可以使用throws关键字声明,在方法后大括号前声明,以“,”隔开多个异常。
2.对于方法中单个异常的声明就是用throw关键字抛出.
3.throws和throw只能声明异常对象,非异常对象编译不通过.
4.关于异常的处理可以参考毕向东老师的视频
  也可以参考fjl_fight同学的:
http://bbs.itheima.com/thread-48712-1-1.html(异常处理[上])
http://bbs.itheima.com/thread-48714-1-1.html(异常处理[上])
http://bbs.itheima.com/thread-48719-1-1.html(异常处理[上])


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马