JAVA 学习笔记 继承与方法重写

  什么是重写呢,在说重写前就不得不提到继承,用百度百科的解释来说,Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

  看了百科的介绍,感觉头大了,什么是派生,什么是吸收?其实吧,用白话讲所谓继承就是儿子用老子的东西,给了你就是你的,随便用,但是一个子类只能有一个父类,咱们不能随随便便去认个干爹什么的,java同样也不行,但是你可以有许许多多兄弟姐妹,笔者恰好赶上了计划生育成了独苗,但java没赶上,所以java里面的父类可以给多个子类进行继承,颇有种开花结果枝繁叶茂的意味。

  在Java里,使用extends来定义一个类的子类,格式是这样的:

      class 子类名 extends 父类名{

......

}

举个栗子:

class student extends people{

......

}

正如上面提到的开花结果枝繁叶茂,java继承就是一个树状的结构(子子孙孙无穷尽也),而如果一个类中没有extends关键字呢,那他就属于Object的子类,也就是说我们经常写的 class ABC 其实就是 class ABC extends Object

但是咱们得有一说一有二说二,老一辈的东西咱们也不能照单全收不是,咱们都有个人隐私更何况老爹老妈?比如人家年少时候的情书啊,情书啊,情书啊(我根本不想看哈哈哈哈)你也不能一下子就全继承过来。这时候呢java就很人性化的告诉你了:用private关键字吧!(友好访问权限的成员变量也不会被继承,也就是说只能继承protected和public类型的)不用什么998,只要在定义前面加上private,就相当于是给隐私上了锁,儿子偷偷看的话小心打屁股!

class futher{

private String qingshu;

}

class son extends futher{

......

}

这时候son里面就不能调用qingshu了,即使他已经完成了futher的继承。



继承说完了就该回归主题说说重写,所谓重写呢就是我们声明的成员变量的名字和父类继承来的成员变量名字相同,这时候子类就会隐藏继承的成员变量。也就是说你老爹把自己的车送你了,但是巧了,你有一辆一模一样的,这时候你就纠结了,咱是用自己的车好呢还是用老爹的车好呢?最后你经过一阵子犹豫后还是决定了用自己的,毕竟自己赚钱买的有成就感嘛!

恰巧java和你的选择一样优秀,在我们声明的成员变量的名字和父类继承来的成员变量名字相同的时候,Java会隐藏掉所继承的成员变量(自己动手丰衣足食!)

但是要是有了突发情况你需要用两辆车,比如说来个自驾游之类的,这是时候你总也不能不用老爹的车反而再买一辆新的把!(土豪们请不要说话社会压力太大)也就是说你该义正言辞的使用继承来的车了,Java重写也是这样,隐藏不代表覆盖,该用时候还是要用!这时候super关键字闪亮登场,有了super你就可以访问被隐藏的成员变量和方法啦。

class futher{

int car=12;

}

class son extends futher{

int car=10;

System.out.println(super.car);

}

有一天你想把老爹的车改装一下参加个飙车大赛,于是老爹和你说了:儿子啊,我虽然把车给你了,用不用是你自己的问题,但是你也不能随随便便就给我改装了吧?你说行,但是你老子怕你不听话,于是就给自己的车加了个final关键字,这下好了,老老实实继承不许做任何修改,飙车大赛也没戏了。也就是说,final方法不允许重写。(至于final类?连子类都没有,绝后了)

final class A {

......

}

但是要注意,重写父类方法的时候不允许降低方法的访问权限,但是可以提高访问权限(人往高处走嘛!)顺序由高到低呢是这样的:

public      protected     友好的     private

这样一来有了和谐的继承与重写关系,Java大家庭又迎来了美好的一天(滑稽)。




  

猜你喜欢

转载自blog.csdn.net/qq_40302611/article/details/80310891