java java面向对象-方法覆盖
2018-03-20 15:10
295 查看
20180312 java java面向对象-方法覆盖
场景:
当父类的方法不适合子类的特征的时候,应该采取方法覆盖:
eg:
class Bird{
public void fly{
System.out.println("飞");
}
}
//企鹅类
class Penguin extends Bird{
//重新定义了fly()
public void fly{
System.out.println("我不会飞");
}
}
class OverrideDemo{
public void static main(String[] args)
{
//创建一个企鹅对象,并调用其飞翔的方法
Penguin p = new Penguin();
//先从子类中去寻找fly方法,若找到就执行
//若找不到就去父类中区寻找fly方法
p.fly();//输出 "我不会飞" ,这就是覆盖
}
}
只有方法才有覆盖的概念。又叫方法的复写,又叫方法的覆写,英文叫override。
方法覆盖的原则(一同两小一大):
一同:1、实例方法的签名必须相同(方法签名= 方法名+方法的参数列表),即覆盖函数与被覆盖函数,只能函数体不同。
两小:2、子类方法的返回值类型是和父类方法的返回类型相同或者是其子类,即子类可以返回一个更加具体的类,如,子类和父类都返回int型数据;或父类返回Object类型,而子类返回String类型的数据(String是Object是子类,即子类返回一个更加具体的类),但该方法不常用。
3、子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。
4、子类方法的访问权限比父类方法的访问权限要更大或相等,例如:
eg1:(可以)//父类
protected void fly{}
//子类
public void fly{}
eg2:(可以)
//父类
protected void fly{}
//子类
protected void fly{}
eg3:(不可以)//父类
public void fly{}
//子类
private void fly{}
eg4:(不可以)//父类
private void fly{}
//子类
private void fly{}
判断是否是方法覆盖的必杀技:在覆盖函数(子类函数)上一行写 @override:若方法是覆盖方法,则会编译通过,否则会编译报错。
eg://父类
private void fly{}
//子类
@override//"@override"会检查子类中的fly是
//否为覆盖方法,并在编译期给出提示信息,
//仅在java5以上的系统中支持该判断语句
private void fly{}
只有方法有覆盖的概念,字段没有覆盖的概念。
场景:
当父类的方法不适合子类的特征的时候,应该采取方法覆盖:
eg:
class Bird{
public void fly{
System.out.println("飞");
}
}
//企鹅类
class Penguin extends Bird{
//重新定义了fly()
public void fly{
System.out.println("我不会飞");
}
}
class OverrideDemo{
public void static main(String[] args)
{
//创建一个企鹅对象,并调用其飞翔的方法
Penguin p = new Penguin();
//先从子类中去寻找fly方法,若找到就执行
//若找不到就去父类中区寻找fly方法
p.fly();//输出 "我不会飞" ,这就是覆盖
}
}
只有方法才有覆盖的概念。又叫方法的复写,又叫方法的覆写,英文叫override。
方法覆盖的原则(一同两小一大):
一同:1、实例方法的签名必须相同(方法签名= 方法名+方法的参数列表),即覆盖函数与被覆盖函数,只能函数体不同。
两小:2、子类方法的返回值类型是和父类方法的返回类型相同或者是其子类,即子类可以返回一个更加具体的类,如,子类和父类都返回int型数据;或父类返回Object类型,而子类返回String类型的数据(String是Object是子类,即子类返回一个更加具体的类),但该方法不常用。
3、子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。
4、子类方法的访问权限比父类方法的访问权限要更大或相等,例如:
eg1:(可以)//父类
protected void fly{}
//子类
public void fly{}
eg2:(可以)
//父类
protected void fly{}
//子类
protected void fly{}
eg3:(不可以)//父类
public void fly{}
//子类
private void fly{}
eg4:(不可以)//父类
private void fly{}
//子类
private void fly{}
判断是否是方法覆盖的必杀技:在覆盖函数(子类函数)上一行写 @override:若方法是覆盖方法,则会编译通过,否则会编译报错。
eg://父类
private void fly{}
//子类
@override//"@override"会检查子类中的fly是
//否为覆盖方法,并在编译期给出提示信息,
//仅在java5以上的系统中支持该判断语句
private void fly{}
只有方法有覆盖的概念,字段没有覆盖的概念。
相关文章推荐
- java java面向对象-方法重载和方法覆盖的区别
- JAVA面向对象基础:继承、变量隐藏、方法重写、包、修饰符、this、super
- 黑马程序员--03.Java面向对象--02.【static关键字】【main方法】【静态成员】
- KingPaper初探Java之面向对象对象的构造方法(三)
- Java面向对象基础--构造方法
- java对象通用方法之覆盖equals时请遵守通用约定、覆盖equals时总要覆盖hashCode、始终要覆盖toString、考虑实现Comparable接口
- PHP面向对象之旅:方法覆盖
- Java面向对象基础--类的设计及分析问题的方法---用户登录例子
- [2013-11-28]JAVA笔记_面向对象基础、方法重载
- Java - 类 - 对象 - 方法 - 构造器 - 面向对象程序设计三大特性
- java面向对象中抽象类的使用方法
- java面向对象-异常在子父类覆盖中的体现
- java面向对象-super、继承、覆盖、多态、类加载、访问控制
- Java面向对象基础--String类中常用的方法
- 七、java的面向对象程序设计(详解equals方法)
- java面向对象思想之方法的重载、this变量、静态变量、Java中的常量
- java面向对象--this关键字、引用变量、构造方法
- java学习笔记《java面向对象编程》——面向对象开发方法概述
- Java面向对象基础--理解main方法
- JAVA面向对象基础:成员变量、方法、方法的重载、构造函数