详解继承特性

当多个类中多次重复的代码时,怎么减少代码量了?可以定义方法,将重复的代码抽取出来,但是有些时候功能是一样的只是会不断的升级等等, 如果我们不断的定义方法自会让我们的代码越来月多,那么有什么好的解决方法了?继承中的覆盖就可以解决这类问题!那么什么是继承了?

继承:如果一个类被一个类继承,那么被继承的类被称为父类,超类,基类,继承的类被称为子类,简单打个比喻,假设父类是一个父亲,子类是一个儿子,儿子继承了父亲的特性(外貌,性格,财产等等),那么我们知道儿子拥有父亲的一些特性,并且自己也有自己特有的特性,父亲并没有,这在程序中也是如此,子类继承父类提高了代码复用性,并提高了扩张性。

继承实现:

class Demo{//父类

}

class Test extends Demo {//子类

}

 这段代码就是一个简单的继承,但是并没有任何意义,

class Demo{

public void show(){

System.out.println("父类");

}

}

class Test extends Demo{

public static void main(String[] args){

Test a = new Test();

a.show();

}

}

这段代码继承了Demo类,Test类实例化了一个自身对象,并调用show()方法,但是show方法是Dmeo类中的方法,如果没有继承就会报错,但是发生了继承,Test类中相当于有一个show()方法,这就是继承的特性。


继承中的覆盖特性:

覆盖如字面意思,将已有的东西给覆盖,或者是重写,那么有什么用了?

class person{

public void skill(){

System.out.println("java编程,");

}

}

class Test{

public static void main(String[] args){

person a = new person();

a.show();

}

}

这是一段简单输入一个人会什么技能的代码(意思意思),可能我这个人现在只会java,也许后面又学了其他语言,如果我们去直接改方法中内容,是可以,目前我这个代码量比较少你可能没什么关系,如果一个方法中有很多代码量且牵扯到很多调用等等,去修改源代码是很痛苦的(如果修改一处错,一处带动一处,最后一大片错误),还不如重写,

所以如果我想要扩张这个方法可以用继承中的覆盖.

class person{

public void skill(){

System.out.println("java编程,");

}

}

class Add extends person{

public void skill(){

System.out.println("java编程,");

System.out.println("c++编程,");

}

}

class Test{

public static void main(String[] args){

Add  a = new Add ();

a.show();

}

}

这段代码Add类继承了person类将person类中的skill()方法覆盖或者重写了,也就是目前我们的skill方法是子类的方法,父类的已经被覆盖了,这样我们就不用修改其源代码,提高了扩张性。


方法的覆盖和重写有什么区别?

方法的重写用在子类方法与父类方法一模一样时,除权限修饰符,返回值类型,方法名和参数列表都是相同的。

子类的构造方法为什么要访问父类的构造方法:

class Fu{

Fu(){

System.out.println("父类");

}

}

class Zi extends Fu{

Zi(){

//这里会有一条隐式的super();语句

System.out.println("子类");

}

}

class Test{

public static void main(String[] args){

Zi a = new Zi();

}

}

这段代码运行结果是“父类”然后“子类”,这就是一旦发生继承,子类的构造方法的第一行会有一条隐式的super();的语句访问下父类的构造方法,为什么要这么做?这就想没有父亲何来的子女,既然是继承,所以要先参考下父类,比如在父类中有一个成员变量int a 初始值位10 当我们继承的时候,可能父类有这变量的特有初始值,如果我们没有访问父类的构造访问直接访问这个数据,输出的结果就是10了,所以我们要先参考下父类是怎么初始化的.



java中的继承支持多继承吗?

这个答案有很多种说法但是不能脱离一个原则!java是不支持多继承!如果你听到有人说java是支持多继承的,他可能想说的是java的接口是可以支持多继承和实现的,


总结:

1、子类的构造方法会访问父类的构造方法

2、构造方法的super();语句必须是第一行

3、如果父类的构造方法没有无参构造方法,子类的构造方法需要显示的调用父类有参构造方法,否则会报错

4、覆盖的的原则的是方法的定义一模一样,权限修饰符可以不一样,但是子类的权限只能提高不能降低

5、被final修饰的类不能被继承

6、继承自会继承属性和方法,不会继承构造方法


继承特性带来诸多好处,但是也带来了一个弊端,就程序的耦合性,这在我们以后的分层开发必须注意的!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值