写点什么

Java 重写 (Override) 与重载 (Overload),mysql 基础语法大全

用户头像
极客good
关注
发布于: 刚刚

TestDog.java 文件代码:


class Animal{


public void move(){


System.out.println("动物可以移动");


}


}


class Dog extends Animal{


public void move(){


System.out.println("狗可以跑和走");


}


}


public class TestDog{


public static void main(String args[]){


Animal a = new Animal(); // Animal 对象


Animal b = new Dog(); // Dog 对象


a.move();// 执行 Animal 类的方法


b.move();//执行 Dog 类的方法


}


}


以上实例编译运行结果如下:


动物可以移动


狗可以跑和走


在上面的例子中可以看到,尽管 b 属于 Animal 类型,但是它运行的是 Dog 类的 move 方法。


这是由于在编译阶段,只是检查参数的引用类型。


然而在运行时,Java 虚拟机(JVM)指定对象的类型并且运行该对象的方法。


因此在上面的例子中,之所以能编译成功,是因为 Animal 类中存在 move 方法,然而运行时,运行的是特定对象的方法。


思考以下例子:


TestDog.java 文件代码:


class Animal{


public void move(){


System.out.println("动物可以移动");


}


}


class Dog extends Animal{


public void move(){


System.out.println("狗可以跑和走");


}


public void bark(){


System.out.println("狗可以吠叫");


}


}


public class TestDog{


public static void main(String args[]){


Animal a = new Animal(); // Animal 对象


Animal b = new Dog(); // Dog 对象


a.move();// 执行 Animal 类的方法


b.move();//执行 Dog 类的方法


b.bark();


}


}


以上实例编译运行结果如下:


TestDog.java:30: cannot find symbol


symbol : method bark()


location: class Animal


b.bark();


^


该程序将抛出一个编译错误,因为 b 的引用类型 Animal 没有 bark 方法。

方法的重写规则

  • 参数列表必须完全与被重写方法的相同;

  • 返回类型必须完全与被重写方法的返回类型相同;

  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方- - 法被声明为 public,那么在子类中重写该方法就不能声明为 protected。

  • 父类的成员方法只能被它的子类重写。

  • 声明为 final 的方法不能被重写。

  • 声明为 static 的方法不能被重写,但是能够被再次声明。

  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。

  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和- –protected 的非 final 方法。

  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,- - 重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  • 构造方法不能被重写。

  • 如果不能继承一个方法,则不能重写这个方法。

Super 关键字的使用

当需要在子类中调用父类的被重写方法时,要使用 super 关键字。


TestDog.java 文件代码:


class Animal{


public void move(){


System.out.println("动物可以移动");


}


}


class Dog exten


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


ds Animal{


public void move(){


super.move(); // 应用 super 类的方法


System.out.println("狗可以跑和走");

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java 重写(Override)与重载(Overload),mysql基础语法大全