java继承和覆写

继承的目的?
     : 代码的重用   
什么是继承?    
    extends
    语法 :
        class 子类 extends 父类 {

        }
    如果没有声明继承  就默认继承Object(所有类的祖类)
静态变量 : 不能被继承,不过可以直接类名调用
静态方法 : 不能被继承,可以调用
成员变量 : 能被继承,前提是子类没有和父类相同的变量(数据类型 和 变量名)  如果有相同的变量,就不会继承
成员方法 : 会被继承 会被覆写
局部变量 : 在方法中 无所谓被继承 跟着方法走
构造方法 : 不能  因为构造方法是用来实例化的 继承过去,实例化的算谁的对象?所以肯定不能

如果都没有继承  怎么会有覆写这一说?
    覆写可以说是针对成员方法来说的 也可以说 除了成员方法,别的都没被继承

覆写的目的?
    : 代码的重用
什么是覆写?
    : 返回值相同,方法名相同,参数列表相同(个数和数据类型都要相同)(针对成员方法来说的,因为别的不能被继承,就没有覆写那一说)
    
this 代表的是本类的对象
super 代表的是父类型的特征  (并没有实例化对象)
this();代表调用本类的无参构造
super();代表调用父类的无参构造,就算不写,默认也会有
this 和 super 都必须写在第一行 所以 同一个方法中,this 和 super不能同时出现

代码 :
public class Ji_Cheng_Fu_Xie{
    public static void main(String[] args){
        Zi_Lei z = new Zi_Lei();//实例化当前类
        z.m_1();//用对象名调用我自己的成员方法,应该没问题吧(其实调用的是覆写父类的成员方法)
        z.m_2();//用对象名调用自己的静态方法,底层默认转换为类名调用,(不存在覆写,因为没继承)
        z.m_3();//我子类里面并没有m_3方法吧,为什么会输出?因为父类的继承给我了,其实是有,上面m_2();是因为我覆写了 ,所以就按我覆写以后的来 ,没覆写,就还按父类继承给我的来
        System.out.println( z.i );//调用成员变量
        System.out.println( z.a );//调用静态变量

//System.out.println( z.h );//为什么这个代码就不能执行,报错?因为我在父类声明的时候,用了private 私有的  就不会被继承 所以  报错
        
        Fu_Lei f = new Zi_Lei();//多态 : 父类的引用,指向的是子类的对象
        f.m_1();//调用父类的m_1()方法
        f.m_2();//调用父类m_2()方法(会输出子类覆写的那个 这就设计到多态,先去找父类的这个方法,看看被继承了吗,如果没被继承,就输出父类的,如果被继承了,就去子类,看看这个方法被覆写了吗,如果没被覆写,就输出原来的成员方法,如果被覆写了,就会输出覆写后的方法,所以这里输出的是"我是子类的成员方法,我覆写了父类的m_2" 因为我覆写了)
        f.m_3();//但是这个就不一样,这个会输出"父类的成员方法 m_3" 因为是继承了 但是我子类没覆写
    }
}

class Fu_Lei{//声明父类  一会被继承的类
   private int h = 100;//成员变量  这个能被继承吗?
    int i = 100;//成员变量
    static int a = 10;//静态变量
    public static void m_1(){//静态方法  (我继承到子类了吗?没有,,,所以不存在覆写)
        System.out.println( "父类的静态方法 m_1" );
    }
    public void m_2(){//在子类被覆写的成员方法
        System.out.println( "父类的成员方法 m_2" );
    }
    public void m_3(){//在子类没被覆写的成员方法
        System.out.println( "父类的成员方法 m_3" );
    }
}
class Zi_Lei extends Fu_Lei{//声明子类 并继承父类  继承语法 : class 子类 extends(继承) 父类
    public static void m_1(){//静态方法 (不存在覆写,因为没被继承)
        System.out.println( "我是子类的静态方法,我并没有覆写父类的静态方法,因为它没继承给我" );
    }
    public void m_2(){//覆写父类的成员方法m_2();
        System.out.println( "我是子类的成员方法,我覆写了父类的m_2" );
    }

}

时间: 2024-11-05 19:03:39

java继承和覆写的相关文章

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重载、覆写、this、super、抽象类、接口

第一.重载和覆写 1) 重载:方法名相同,参数类型和个数不同,典型的是构造方法的重载  覆写:方法名.参数类型.返回值类型全部相同,典型的是接口的实现: 2)重载对权限没有要求:覆写要求  被覆写的方法不能拥有更严格的权限: 3)重载发生再一个类中:覆写发生在继承类中. 第二.this和super 1)this访问本类中的属性(方法),如果本类中没有此属性(方法),则从父类中 继续寻找:super询问父类中的属性(方法): 2)调用本类构造,必须放在构造方法的首行:调用父类构造,必须放在子类构造

java重载与覆写

很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参数不同的方法组.本质是对不同方法的称呼. override(覆写):存在继承关系的两个类之间,在子类中重新定义了父类中存在的方法.本质是针对同一个方法,给出不同的实现. 我们先来看重载的例子: public class OverloadParent{ public String getPerson(

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

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

关于方法的继承和覆写

* 关于方法的覆写: *   关于方法的重写和覆盖的前提条件: *     子类继承父类,就继承了父类的所有方法和属性,就相当于把父类的代码完全复制一份到子类,只是相当于 *     我们子类中可以添加新的方法和属性,同时也可以扩展改写继承自父类的方法 *     1 什么时候方法要进行重写? *     如果父类中的方法已经无法满足子类的要求,需要将父类中的方法进行重新写一遍 *     2.子类如果重写父类中的方法之后,这类对象一定调用重写之后的方法 *     3 发生方法覆盖的条件: *

java解惑之覆写

一个包内私有的方法不能能被另一个包中的某个方法直接覆写 <span style="font-size:18px;">package one public class A extend B{ void fun(){//看似覆写了B中的fun方法 } main(){ new A.doIt(); } } package two public class B{ void fun(){ } public doIt(){ fun(); } }</span> 主函数里将要调用

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

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

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中的overload(方法的覆写)

方法覆写(overload)与方法的重载非常相似,它在 Java的继承中也有很重要的应用. 写程序可能会碰到下面的情况,在父类中已经实现的方法可能不够精确,不能满足子类 的需求.例如在前面的 Animal类中,breath方法就过于简单,对于鱼类动物是用腮呼吸的, 而对于哺乳动物则是用肺呼吸的,如何实现呢,Java提供的方法覆写就是解决这方面的问题. 在下面的程序中首先定义了一个父类 Animal,然后定义 Animal的  3个子类  Tiger.Fish 和 Dog,在父类中提供了 3个方法