java 覆写_java继承和覆写

本文详细介绍了Java中的继承概念,包括如何使用`extends`关键字创建子类,以及子类如何继承父类的成员变量和方法。文章讨论了静态变量和方法不被继承的情况,并解释了构造方法不能被继承的原因。此外,文章阐述了方法覆写的目的和条件,强调了覆写只针对成员方法。通过实例展示了如何通过子类对象调用覆写和未覆写的方法,以及多态的概念。最后,文章探讨了访问权限对继承的影响,如私有变量无法被继承。
摘要由CSDN通过智能技术生成

继承的目的?

: 代码的重用

什么是继承?

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" );

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值