java 多态心得

原创 2018年04月17日 21:12:41

Override(重写)是子类与父类的一种多态性体现。
Override允许子类改变父类的一些行为。
为什么需要Override:当父类不满足子类的一些要求时我们就需要子类对父类的一些行为进行重写。
例如:某公司里的员工的电话号码不允许对外公开,而销售人员(员工)的电话号码则需要对外公开。

这时我们就可以这样做:

public class Employee {  

    private String mobile;  

    public Employee(String mobile) {  
        this.mobile = mobile;  
    }  

    protected String showMess(){  
        return "电话号码:"+mobile;  
    }  
}

员工类的showMess方法是protected的,所以位于其他包的对象是访问不到的。
然后定义一个销售人员的类(Sales),并继承Employee类

public class Sales extends Employee{  

        //子类除了具有父类的一些属性,也可以有自己的一些属性  
    private String msn;  

    public Sales(String mobile,String msn) {  
        super(mobile);  
        this.msn = msn;  
    }  

    @Override  
    public String showMess() {  
        return super.showMess()+"==msn:"+this.msn;  
    }  
} 

注意这时被覆盖的showMess方法的访问级别是public,可以被任何其他对象访问到。

关于Override有几点要注意的地方:
1.被覆盖方法的访问控制级别可以不一样。
例如上例父类的showMess方法的访问级别为protected的,而子类覆盖的showMess方法访问级别则为public的。

但子类的访问级别必须要高于父类被覆盖方法的访问级别,如果父类是public的而子类是protected的则是错误的。

2.方法被定义为private或static或final的则不能被覆盖。

3.方法的返回类型:子类的返回类型可以是更具体的对象,例如可以将Employee类的返回类型改为Object也正确。而倒过来则错误。

4.在方法调用时先会在子类中找覆盖的方法,如果子类中没有则会在父类中去找

5.要是重写一个方法,父类必须有相同参数的方法

public class Parent {  

    private int num(int i,int j){  
        return i+j;  
    }  

    public static void main(String[] args) {  
        Parent p = new Child();  
        System.out.println(p.num(1, 2));  
    }  
}  
class Child extends Parent{  

    public int num(int x,int y){  
        return x-y;  
    }  
} 

这段代码的执行结果为什么呢?如果你回答-1则错了,正确答案是3。
为什么呢?因为父类的num方法是private的,所以不能被覆盖,所以子类的num方法不是一种Override,因此在子类找不到被覆盖的num方法就会执行父类的num方法。所以结果输出为3. 要是基类的num方法为非private,则会被覆盖,答案为-1.

public class Parent {  

    public int test(){  
                //执行子类的num方法  
        return num(1,2);  
    }  

    protected int num(int i,int j){  
        return i+j;  
    }  

    public static void main(String[] args) {  
        Parent p = new Child();  
        System.out.println(p.test());  
    }  

}  
class Child extends Parent{  

    public int num(int x,int y){  
        return x-y;  
    }  
}  

那么这段代码的执行结果是-1,因为父类test方法调用的是子类的num方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35088600/article/details/79980934

Java接口以及多态性简单理解

对外提供的都是接口。 接口的思想: 笔记本电脑的USB接口: 1.接口的出现扩展了功能 2.接口其实就是暴露出来的规则 3.接口的出现降低了耦合性,解耦*类用...
  • tf599262681
  • tf599262681
  • 2017-06-08 17:04:34
  • 167

总结/继承,多态

二.不能被继承的父类成员:                    1.private                    2.子类与父类不在同包,使用默认访问权限的成员。           ...
  • huang15733897076
  • huang15733897076
  • 2017-05-23 19:23:47
  • 101

2016.9.13继承多态基础总结

下面是9月13日课程心得总结: 1.构造器/构造函数   定义:任何一个类都会有一个默认的构造函数,用于构造一个实例.   格式:修饰符 函数名(形式参数){ 函数体 }   注意:1)构造函数并不是...
  • huaxinjiqiren
  • huaxinjiqiren
  • 2016-09-13 11:58:03
  • 151

C#之多态性总结

起初接触到这个名词的时候,是在看C++看到的,里边写的概念还是比较好理解的。但是这次看到了C#中关于多态的视频的时候,讲的我是云里雾里的。脑子里除了雾还是雾。不过还好,有个大神,还有巨人的帮助。让我渐...
  • u010196821
  • u010196821
  • 2014-03-09 14:48:25
  • 948

java继承和多态、接口小结

详细代码自己找自己敲,以下会不定时更新。一个文件中只能有一个公共类 java的继承只能是单继承。一个类之所以能够调用父类成员,是由于java编译器会自动为子类添加一个引用名为super的父类成员对象...
  • q610376681
  • q610376681
  • 2015-10-06 12:17:35
  • 666

浅谈对java多态的理解

浅谈对java多态的理解
  • JerryBurning
  • JerryBurning
  • 2015-04-15 23:33:34
  • 2153

学习java的心得精华

  • 2010年03月11日 16:03
  • 152KB
  • 下载

继承和多态的难点总结

继承以后子类可以得到什么: 子类拥有父类非private的属性和方法子类可以添加自己的方法和属性,即对父类进行扩展子类可以重新定义父类的方法,即多态里面的覆盖,后面会详述 关于构造函数: 构造函数...
  • wangjinyang_123
  • wangjinyang_123
  • 2014-12-22 23:01:19
  • 683

虚函数和多态性---总结

  l         虚函数和多态性使得设计和实现易于扩展的系统成为可能。在程序开发过程中,不论类是否已经建立,程序员都可以利用虚函数和多态性先编写这些类对象的程序。l         虚函数和多态...
  • xuexiuyin
  • xuexiuyin
  • 2007-06-07 10:32:00
  • 1847

java接口实现多态

多态: 父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类 的对象。 实现关系下的多态: 接口  变量  = new  接口实现类的对象。 i...
  • oguro
  • oguro
  • 2016-11-08 20:00:43
  • 4497
收藏助手
不良信息举报
您举报文章:java 多态心得
举报原因:
原因补充:

(最多只允许输入30个字)