关于方法的继承和覆写

* 关于方法的覆写:
 *   关于方法的重写和覆盖的前提条件:
 *     子类继承父类,就继承了父类的所有方法和属性,就相当于把父类的代码完全复制一份到子类,只是相当于
 *     我们子类中可以添加新的方法和属性,同时也可以扩展改写继承自父类的方法
 *     1 什么时候方法要进行重写?
 *     如果父类中的方法已经无法满足子类的要求,需要将父类中的方法进行重新写一遍
 *     2.子类如果重写父类中的方法之后,这类对象一定调用重写之后的方法
 *     3 发生方法覆盖的条件:
 *     第一: 发生在具有继承关系的两个类之间
 *     第二: 必须具有相同的方法名,相同的返回值类型,相同的参数列表(如果是参数列表不同,系统就会认为这两个是不同的方法进行重载)
 *     (返回值代表了函数的功能,复写不能更改函数的功能)
 *     第三: 重写的方法不能比被重写的方法拥有更低的访问权限
 *     第四: 重写的方法不能比被重写的方法抛出更广泛的异常
 *     第五: 私有的方法不能被覆盖
 *       不调用的时候就没有报错
 *       调用的时候才会报错,说明,这个方法是运行时错误
 *      第六: 构造方法无法被覆盖,因为构造方法无法被继承
 *      第七: 静态的方法不存在被覆盖
 *      因为,静态方法进来以后,不会再有新的内存操作,所以,就没有覆盖这一说
 *      第八: 覆盖值得是成员方法,和成员变量无关
 *      成员变量,是指这个类代表的所有个体的共有属性,只是属性值不一样
 *
 *      4 继承最基本的作用:代码复用
 *       继承最基本的功能:方法可以重写
 *       new也是代码的重用,但是不可以进行扩展,,重写就是扩展,不可以
 *       new的时候,只能够被调用,对数据进行删减改查,不能够进行功能扩展

* 私有的方法无法被覆盖,即使在程序中重写了方法,但是底层仍然会调用父类方法
 下面是一个覆写的例子:
//父类
class Override_02{//一个类
    //私有方法
    private void m_1(){//私有的没有返回值的m_1方法
        System.out.println( "A‘m_1 method invoke!!" );//输出
    }
    public void m2(){
        System.out.println( "我是父类" );
    }
    //入口
    public static void main (String [] args){//公共的静态的没有返回值的main方法,是程序的入口
        //多态:这里是私有方法,不能被继承
        Override_02 a = new B();//运行原理:把子类对象的地址赋值给父类的对象(多态),输出的时候先看能不能被继承,如果不能被继承,那就输出父类的内容,如果能被继承,就看能能不能被覆写,(要求:返回值,方法名,形参列表都要一样),如果没被覆写,就输出父类的内容,如果被覆写了,就输出子类的新内容
        a.m_1();//父类中的m_1方法不能被继承,所以输出的是父类的m_1
        a.m2();//父类中的m2方法能被继承,所以输出子类中的内容,因为子类的方法名,返回值,形参列表和父类相同,所以可以被复写,输出子类的新内容
    }
}
//子类
class B extends Override_02{
    //尝试重写父类的私有方法
B(){

    }
    public void m_1(){
        System.out.println( "‘B‘m_1 method invoke" );
    }
    public void m2(){
        System.out.println( "我是子类 " );
    }
}

   由于学习方法的覆写的时候,还没有学习多态,所以里面涉及多态的东西我也知道的不是很多,主要的是关于方法的覆写,运行原理也是我自己的理解写出来的,有什么不对的地方还希望和大家多多交流,O(∩_∩)O谢谢!

时间: 2024-11-05 21:52:00

关于方法的继承和覆写的相关文章

类的继承,方法的重载和覆写

在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:同类可以实例化(Student t=new Student(),Person p=new Person()),人类可以强制转换为学生类(Student t=(Student)Person),人类可以是学生类(Person p=new Student()): 2.方法的重载:只要求方法名称相同,返回类型.参数数目和参数类型都可以不相同: 3.方法的覆写:只有基类中

java继承和覆写

继承的目的?     : 代码的重用   什么是继承?        extends     语法 :         class 子类 extends 父类 {         }    如果没有声明继承  就默认继承Object(所有类的祖类)静态变量 : 不能被继承,不过可以直接类名调用静态方法 : 不能被继承,可以调用成员变量 : 能被继承,前提是子类没有和父类相同的变量(数据类型 和 变量名)  如果有相同的变量,就不会继承成员方法 : 会被继承 会被覆写局部变量 : 在方法中 无所谓

继承BaseAdapter覆写getView()方法解析

当我们继承BaseAdapter自定义适合自己使用的Adapter时候,不可避免的要覆写getView()方法.自己在分析蓝牙4.0官方源代码遇到这个问题,分析了几遍,有所领悟,参考了这篇博文http://blog.csdn.net/pkxiuluo01/article/details/7380974,现结合蓝牙4.0官方的这部分代码将getView()解析一下. //当界面每显示出来一个item时,就会调用该方法,getView()有三个参数,第一个参数表示该item在Adapter中的位置:

JAVA继承与覆写

实例:数组操作 首先是开发一个整型数组父类,要求从外部控制数组长度,并实现保存数据以及输出.然后子类中实现排序和反转. 基础父类代码如下: 1 class Array { 2 private int data [] ; 3 private int foot ; 4 public Array(int len ) { 5 if (len > 0 ) { //至少有元素 6 this.data = new int [len] ; 7 } else { 8 this.data = new int [1]

Java多态特性:重载和覆写的比较

Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void main(String args[]){ int one = add(10,20) ; // 调用整型的加法操作 float two = add(10.3f,13.3f) ; // 调用浮点数的加法操作 int three = add(10,20,30) ; // 调用有三个参数的加法操作 Syst

Java 覆写初探

Java 覆写 继承性的主要特征是子类可以根据父类已有的功能进行功能扩展,但是在子类定义属性或方法的时候有可能定义属性和方法和父类同名,在此类情况下就称为:“覆写”. 方法的覆写:[改良原本功能不足的方法] 子类定义的方法与父类方法名称相同.参数的类型及个数.返回值相同的方法. class A { public void fun() { System.out.println("A.fun()方法") ; } } class B extends A { public void fun()

JAVA中继承时方法的重载(overload)与重写/覆写(override)

JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个类中也可以发生在继承关系中. class A { } class B extends A { public void fun(String data1) { System.out.println(data1); } pub

Objective-C-类(static)方法、实例方法、overwrite(覆写)、属性(property)复习

先来定义一个Human父类 定义部分: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // //  Human.h //  OOP // //  Created by jimmy.yang on 11-2-9. //  Copyright 2011 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> @interface Human :

Java基础学习笔记【02】方法覆写、快捷键、super、this、单例模式、适配器

访问类型默认default就是默认没写访问权限,就是包下的访问权限(类内部.同一个包) 除了private访问权限本类,其他的访问权限都包括包 继承:[A继承B] 1 类名A extends 类名B 类的方法[覆写]: 方法要素 描述 方法名 子类父类的覆写方法名一致 返回值 小于父类的返回 参数 小于父类的参数类型 访问类型 大于父类的访问类型 覆写: 1 public void Fun(object obj){  } 1 2 @override public void Fun(string